@One-To-One

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