Boa tarde, Tenho um objeto pessoa, que é pai de varias classes, como funcionário, cliente e fornecedor. Quando crio um funcionario e esse mesmo não existe com o nome em pessoa, o insert é feito normal, só que se ja existir uma pessoa com esse mesmo nome ligada a outra entidade, o hibernate tenta fazer um insert na tabela pessoa, em vez, de fazer apenas o update dos campos de pessoa e insert nos campos da entidade que estou cadastrando. Não sei o que estou fazendo de errado, alguém pode me dar um exemplo dessa implementação?
Classe pessoa
@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "person")
@Inheritance(strategy= InheritanceType.JOINED)
public class Person extends Model{
@NotNull
private String name;
@NotNull
@Column(unique = true)
private String docIdentification;
private String phone;
private String email;
private String contactName;
}
Classe fornecedor
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "supplier")
@Entity
public class Supplier extends Person {
@NotNull
private LocalDateTime createdAt;
@NotNull
private LocalDateTime updatedAt;
@OneToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "location_id", referencedColumnName = "id")
private Location location;
private String website;
private String observation;
}
Metodo service onde é feito o save
List<Person> byNameIgnoreCase = personRepository.findByNameIgnoreCase(supplierForm.getName());
Supplier supplier = new Supplier();
if(!byNameIgnoreCase.isEmpty()){
supplier.setId(byNameIgnoreCase.get(0).getId());
}
//person
supplier.setName(supplierForm.getName());
supplier.setPhone(supplierForm.getPhone());
supplier.setEmail(supplierForm.getEmail());
supplier.setContactName(supplierForm.getContactName());
supplier.setDocIdentification(supplierForm.getDocIdentification());
//Supplier
supplier.setCreatedAt(LocalDateTime.now());
supplier.setUpdatedAt(LocalDateTime.now());
supplier.setLocation(location);
supplier.setWebsite(supplierForm.getWebsite());
supplier.setObservation(supplierForm.getObservation());
return new SupplierDTO(repository.save(supplier));