@OneToOne JPA

2 respostas
spycall

Olá, tenho 2 tabelas, User e Address com relacionamento 1 pra 1, e 2 classes uma para cada tabela.

as classes estão assim: UserDomain
@Id
	@GeneratedValue (strategy= GenerationType.IDENTITY)
	@Column(name="idUser")
	private int idUser;

	@Column(name="dsLogin")
	private String dsLogin;

	@Column(name="dsName")
	private String dsName;

	@Column(name="dsPassword")
	private String dsPassword;
	
	@OneToOne (cascade=CascadeType.ALL)
	@JoinColumn(name="idUser")
	private AddressDomain addressDomain;
AddressDomain
@Id
	@GeneratedValue (strategy= GenerationType.IDENTITY)
	@Column(name="idAddress")
	private int idAddress;
	
	@Column(name="nmAddress")
	private String nmAddress;
	
	@Column(name="nmNumber")
	private String nmNumber;
	
	@OneToOne (cascade=CascadeType.ALL)
       @JoinColumn(name="idUser")
	private UserDomain userDomain;
Quando mando inserir, está inserindo os dados da tabela User e tambem está inserindo os dados da tabela Address, memos o idUser que está na tabela Address. Olhando a query que ele gera, ele não está colocando o campo IdUser
insert into Adress(idAddress,nmAddress,nmNumber) values(?,?,?)
Está faltando alguma coisa no mapeamento ?

2 Respostas

J

@OneToOne
//Coloca os demais parametros, não deixa default.
@JoinColumn(name = “idUser”, updatable = false, insertable = true, nullable = true)

spycall

Consegui resolver, mais acho que a solução está escroto.

UserDomain userDomain= new UserDomain();
		AddressDomain addressDomain= new AddressDomain();
		
		userDomain.setDsName(userVo.getName());
		userDomain.setDsLogin(userVo.getLogin());
		userDomain.setDsPassword(userVo.getPassword());
		addressDomain.setNmAddress(userVo.getAddress());
		addressDomain.setNmNumber(userVo.getAddressNumber());
		userDomain.setAddressDomain(addressDomain);
		userDomain.add();
O que está faltando é uma linha passando o próprio userDomain que eu estou populando como atributo de AddressDomain.

addressDomain.setUserDomain(userDomain);

Mas é esquisito eu ter que passar o userDomain para o addressDomain se eles já estão mapeados, achava que ele faria isso sozinho.

Criado 6 de agosto de 2007
Ultima resposta 6 de ago. de 2007
Respostas 2
Participantes 2