Bom dia pessoal!
Estou com um problema aqui que está se realmente bem obscuro!
Eu tenho um bean Empresa e um bean Contrato.
Onde ambos estão mapeados para tabelas, e existem mapeamentos de one-to-many, onde uma empresa possui vários contratos.
Quando a empresa vai alterar seus próprios dados pessoais deveria fazer update somente na tabela Empresa! Acontece que logo em seguida o Hibernate está fazendo um update em Contratos também!!!
Pensei que fosse algo relacionado a Cascade, procurei um Cascade.NONE mas não existe nem em JPA nem nas anotações do Hibernate…
O mapeamento está assim:
@OneToMany(fetch = FetchType.LAZY)
@JoinColumn(name="idempresacliente")
private List<Contrato> contrato;
// getteres e setteres abaixo
Alguém tem alguma ideia do que poderia ser?!
vlw!!
RESOLVIDO
coloquei um updatable=false na anotação no bean Empresa, ficou assim:
@OneToMany(fetch = FetchType.LAZY)
@JoinColumn(name="idempresacliente",updatable=false)
private List<Contrato> contrato;
E o HIbernate parou de fazer update por conta própria, espero que isso agora não afete os casos de operações simultâneas envolvendo essas duas tabelas rsrsrs :?
E se você tirasse o @JoinColumn do lado @OneToMany?
Quando eu fosse fazer uma consulta e precisasse fazer um join ele não faria mapearia o atributo id de Empresa para o atributo idempresacliente de Contrato.
[quote=Victor Neves]Quando eu fosse fazer uma consulta e precisasse fazer um join ele não faria mapearia o atributo id de Empresa para o atributo idempresacliente de Contrato.[/quote]Se o relacionamento for bidirecional, basta mapear o join column do outro lado, não?
Encontrei uns posts na época dizendo que se o relacionamento é one-to-many, voce não precisa mapear a outra entidade no lado que terá apenas uma entidade mapeada…
Melhor dizendo, eu nao precisaria mapear Empresa em Contrato, que o relacionamento é “muitas empresas para um contrato”…
[quote=Victor Neves]Encontrei uns posts na época dizendo que se o relacionamento é one-to-many, voce não precisa mapear a outra entidade no lado que terá apenas uma entidade mapeada…
Melhor dizendo, eu nao precisaria mapear Empresa em Contrato, que o relacionamento é “muitas empresas para um contrato”…[/quote]Realmente não precisa. É o chamado Bidirecional ou Unidirecional. O que achei estranho é ele disparar o cascade de modo automático, mesmo não estando configurado para fazer isso.
pois é, eu tambem achei muito estranho!!! ainda estou sem entender o por que dele fazer isso…
renanreismartins, muito bom o artigo!! gostei! vale a pena ler!
Eu inclusive procurei no livro que tenho sobre JPA e ele não cita exemplo de @OneToMany com @JoinColumn. O JoinColumn indica que o lado OneToMany deve ser o dono do relacionamento, sendo que para esse tipo de relacionamento o ManyToOne é sempre o dono do relacionamento. O.o
É cara, são os mistérios das implementações do JPA. O importante é que está funcionando. ^^ [=