Hibernate - Update em cascata

3 respostas
D

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;
}
O metodo Update:
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.

3 Respostas

L

Cara este erro pode ser pq vc esta tentado salvar um objeto que referencia outro objeto que nao esta mais no estado persistente ou seja um objeto desligado do contexto do hibernate, ou um objeto sem um id tbm faca um debug

D

Sabia que essa resposta iria aparecer, essa foi a que eu mais vi em outros foruns, o problema que eu já fucei td que eu pude e não achei a solução.

O problema eu já sei, não sei como solucionar.

O mapeamento que eu fiz das classes estão corretos???

L

Posta os metodos onde vc salva os objetos(onde vc faz o save() ou merge() ou persist() ) posta aew q ue fica mais facil ajudar.

Criado 10 de novembro de 2009
Ultima resposta 11 de nov. de 2009
Respostas 3
Participantes 2