Boa tarde pessoal,
Estou com uma imensa dúvida sobre mapeamento 1 - 1
Alguém poderia me dizer, por favor, como funciona?
por exemplo
tenho duas tabelas: Usuario e contato, onde um usuario têm um contato e um contato têm um usuario.
Fiz o mapeamento, e fiz uma página para gravar um usuario. A estrutura das tabelas são mais ou menos assim:
usuario
(idUsuario)PK
contato
(idContato)PK
(usuarioId)FK
Nesta situação, ao salvar um usuario ele atribui o valor “idUsuario” em “usuarioId”, mesmo se meu form é apenas para salvar usuario?
Obrigado Pela Atenção!!!
depende de como voce configurou o @Id e o @cascadeType!!!
tem que ver como vc configurou o seu pojo,seria algo assim
Class Usuario
//Definição da chave primária
@Id
//Definição do mecanismo de definição da chave primária
@GeneratedValue(strategy = GenerationType.SEQUENCE)
//Informa o nome da coluna mapeada para o atributo
@Column(name="id_usuario")
private int id;
@OneToOne
@JoinColumn(name="idContato")
private Contato contato;
-------------------
class Contato
@OneToOne(mappedBy="contato")
@Cascade(CascadeType.ALL)
private Usuario usuario;
então, a minha maior dúvida é a seguinte:
em uma situação desta, onde um usuario tem um contato e vice-versa, sempre que eu salvar um usuario ele salva um contato mesmo que em branco?
por exemplo:salvei um usuario com apenas um nome, ja é atribuido um id para o contato?,
Muito obrigado pela atenção!!!
bom é o seguinte com cascadeType setado com ALL tanto para insercao,remocao ou atualizacao q vc fizer no bean,ele vai ser alterado nele nos “filhos deles e subfilhos e por ai em diante”,pense em uma arvore,se vc salvar o “No” mais a cima ele vai salvar os filhos tb,mais claro vc tem q ter criado os filhos,no seu caso vc tem q fzr isso
//desse jeito ele vai salvar Usuario e o contato
Usuario usr = new Usuario();
usr.setNome("Obina");
Contato cnt = new Contato();
cnt.setEmail("Mengao@penta.com.br");//hehehhe
usr.setContato(cnt);
session.saveOrUpdate(usr);
//desse jeito ele so vai salvar o Usuario
Usuario usr = new Usuario();
usr.setNome("Obina");
session.saveOrUpdate(usr);
ainda tem esses parametros
FetchType.EAGER: sempre que o objeto “pai” for trazido da base de
dados, o atributo mapeado com fetch=FetchType.EAGER fará com que o
seu conteúdo também seja trazido;
FetchType.LAZY: sempre que o objeto “pai” for trazido da base de dados,
o atributo mapeado com fetch=FetchType.LAZY fará com que o seu
conteúdo somente seja trazido quando acessado pela primeira vez.
A
Agora entendi mas, naquele caso que exemplifiquei vc me respondeu com um exemplo de mapeamento,
no qual o FK foi utilizado no mapeamento da tabela de usuario, este é o procedimento que devo tomar?
bom para FK sim,os paremtros é vc q tem q saber como vai ser carregado as informações
eu tenho uma apostila muito boa aki para hibernate-annotation so nao posso colocala aqui q ela ultrapassa o tamanha permitido me passa um mensaem privada com o seu email q t mando
vou te mandar o meu e o da empresa