Galera estou com o seguinte problema, estou tentando atualizar algumas tabelas em cascata no hibernate mais estou tendo problemas.
O minhas tabelas estão modelas como segue abaixo:
person 0xN address
person 1x1 serviceProvider
serviceProvider 1x1 corporation
serviceProvider 1x1 individual
Minha classes estão mapeadas como segue abaixo:
@Entity
@Table(name = "person")
public class Person {
@Id
@GeneratedValue
private Long id;
@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name = "address_id", nullable = true)
private Address address;
@OneToOne(mappedBy="person")
private ServiceProvider serviceProvider;
}
@Entity
@Table(name = "service_provider")
public class ServiceProvider {
@Id
@GeneratedValue
private Long id;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name="person_id")
private Person person;
@OneToOne
private Corporation corporation;
@OneToOne
private Individual individual;
}
@Entity
@Table(name = "corporation")
public class Corporation {
@Id
@GeneratedValue(generator = "foreign")
@GenericGenerator(name = "foreign", strategy = "foreign", parameters = { @Parameter(name = "property", value = "serviceProvider") })
@Column(name = "service_provider_id")
private Long serviceProviderId;
@OneToOne(optional = false, cascade = CascadeType.ALL)
@PrimaryKeyJoinColumn
private ServiceProvider serviceProvider;
}
@Entity
@Table(name = "individual")
public class Individual {
@Id
@GeneratedValue(generator = "foreign")
@GenericGenerator(name = "foreign", strategy = "foreign", parameters = { @Parameter(name = "property", value = "serviceProvider") })
@Column(name = "service_provider_id")
private Long serviceProviderId;
@OneToOne(optional = false, cascade = CascadeType.ALL)
@PrimaryKeyJoinColumn
private ServiceProvider serviceProvider;
}
public void update(Person person, ServiceProvider serviceProvider, Corporation corporation, Address address){
person.setAddress(address);
corporation.setServiceProvider(serviceProvider);
serviceProvider.setPerson(person);
serviceProvider.setCorporation(corporation);
this.session.update(serviceProvider);
this.session.update(person);
}
Já tentei de tudo e sempre da o mesmo erro:
org.hibernate.TransientObjectException: The given object has a null identifier:
Alguém tem alguma dica ai, pois já perdi tempo demais com esse erro, e não sei mais o que fazer.