JPA + Mapeamento One-to-One como chave primária

4 respostas
M

Olá Boa Tardee todos!!!
Já conseigo fazer o mapeamento normal, mas estou com duas tabelas que funcionam da seguinte forma:

Tabela1: Usuario
Campos:
id: INT
nome: CHAR
cpf: CHAR

Tabela2: Endereco
Campos:
id_usuario: INT (Esse campo é PK e FK da tabela Usuário)
rua: CHAR
numero: INT

Com essas tabelas qndo vou cadastrar um usuario usando hibernate, ele não consegue inserir o endereço pois eu não passo para ele o ID, esse ID seria no caso o ID da tabela Usuario que eu cadastrei anteriormente. Será que tenho que cadastrar o Usuario e depois cadastrar o Endereco para este Usuario?
Como seria feita as anotações corretas???

Os códigos abaixo:

Classe Usuario:

@Entity
@Table(name="USUARIO")
public Class Usuario implements Serializable{

@Id
	@Column(name="ID")
	private Long id;
	
	@Column(name="NOME")
	private String nome;


	@Column(name="COF")
	private String cpf;

       @OneToOne(cascade=CascadeType.ALL)
	@PrimaryKeyJoinColumn()
	private Endereco endereco = new Endereco();

... gets, sets, equal e hashCode

}

Classe Endereco:

@Entity
@Table(name="ENDERECO")
public Class Endereco implements Serializable{

@Id
	@Column(name="ID_USUARIO")
	private Long id;
	
	@Column(name="RUA")
	private String rua;


	@Column(name="NUMERO")
	private int numero;

... gets, sets, equal e hashCode

}

Bom qndo vou dar um merge por exemplo:

em.getTransaction().begin();
Usuario u = new Usuario();
u.setNome("teste");
u.getEndereco().setRua("Rua");
em.merge(u);
em.getTransaction().commit();

Ele da o seguinte erro:

javax.persistence.PersistenceException: org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save(): com.br.Endereco

Alguem sabe a meneira pra eu falar pro hibernate que o ID vai ser uma chave estrangeira de Usuario e primária também?

Obrigado a todos
=D

Abraçoss

4 Respostas

GraveDigger

De uma olhada na annotation @PrimaryKeyJoinColumn

[]'s

M

Então eu já olhei essa anotação cara… Ela consegue fazer QUASE tudo que eu preciso mas ela nao gera o ID da tabela secundária. No caso que passei o id_usuario ela nao gera…

Valeu Obrigado

F

E ai matheuzum se vc conseguiu resolver esse problema posta a resolução ai por favor, estou com o mesmo problema…

Valeu!!

M

Estou com este problema, alguem conseguiu resolver e possa me ajudar??

Criado 17 de março de 2009
Ultima resposta 20 de jul. de 2010
Respostas 4
Participantes 4