Bom dia. Gostaria de saber de vcs uma coisa. Quando eu tenho uma classe entidade no hibernate todas as propriedades desta classe tem que ser mapeadas ou somente as que for necessario.
EX:
Eu tenho uma classe carro e uma classe pneu. Na OO um carro tem varios pneus. E varios pneus sao de um carro.
Na classe Carro eu tenho alem de nome e modelo como propriedades eu tenho uma propriedade que é uma colecao de pneus(Set<Pneu> pneus).
Na classe Pneu eu tenho alem da marca como propriedade eu tenho um Objeto Carro como propriedade.
O relacionamento é unidirecional entre elas. Todos os atributos da classe carro sao mapeados com annotation menos o atributo pneus(Set<Pneu> pneus)
Na classe Pneu eu tenho a relacao (many to one ) annotada, para efetuar a relacao.
A minha duvida é. Na classe carro eu posso deixar o atributo pneus sem annotation? Ou quando eu declaro que uma classe é uma entidade todos atributos tem ser annotados…
você não precisa anotar todas as propriedades, você pode ter membros da classe que não existam nas tabelas.
use a annotation @Transient nesses membros.
ddduran
Você não precisa anotar atributos que tenham o mesmo nome dos campos nas tabelas, mas você vai precisar fazer a anotação pra esse seu relacionamento (que me desculpe mas acho que é bidirecional :P)
eu diria para você fazer um manyToOne em um e um oneToMany em outro e só indicar quem mapeia o relacionamento (mappingBy)
O
omaisnormalbaba
dduram.
Agora vc chegou onde eu queria. Ok. Quando eu declaro mappedBy em uma classe ela é a proprietaria ou o outro lado que é? Tipo No caso UsuarioVO tem declarado mappedBy com MensagemVO (one to many) intao, UsuarioVO é o proprietario ou MensagemVO que é?
E assim que eu descrever quem é o proprietario, somente depois desse proprietario ser persistido que o outro objeto vai ser.
marcelo_mococa
isso mesmo.
em relacionamentos one-to-one o lado com mappedBy será o dono da relação, ou seja, ele que comanda a relação.
em relacionamentos one-to-many / many-to-one, o lado one-to-many será o dono.
Aqui nao diz que o dono do relacionamento é o outro lado?
ddduran
Acabei indo almoçar e não vi seu post mas acho que os colegas já responderam
marcelo_mococa
desculpe…
o lado many-to-one será o owner por default.
mas como você mesmo citou, o comum (talvez correto) é sempre o lado que possui a coleção (list, set, etc…) ser o owner, no caso o lado one-to-many.
Caso o lado many-to-one for o owner, o hibernate (ou jpa) irá salvar as mensagens, depois o usuário e ainda faria um update para cada mensagem, setando a chave estrangeira do usuario.
marcelo_mococa
vale lembrar que com JPA não tem como alterar o owner. Ele sempre será o lado many-to-one.
É esperado que na versão 2.0 a JPA o lado one-to-many será obrigatoriamente o owner.