Hibernate

11 respostas
jpajavahibernate
C

è possivel definir uma chave estrangeira para uma propiedade que não seja um objeto?

11 Respostas

Lucas_Camara

Sim. Basta anotar com @Column(name = "nome_coluna_fk").

C

Acho que me expressei mau, o que eu quero na verdade é evitar isso em alguns caso

@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name = "idCargo")
private Cargo cargo;

e ter somente um integer para fazer referencia

private Intefer idCargo;
Lucas_Camara

Rapaz, até onde sei, não é possível. As anotações @ManyToOne e @JoinColumn são usadas apenas para entidades relacionadas.

C

sim, eu estava tentando fazer com o @columndefinition mas não deu certo, eu posso criar manualmente a chave estrangeira no banco de dados, mas queria que o hibernate fizesse isso.

Lucas_Camara

E pq você não pode colocar a classe?

C

eu posso, mas não queria kk

Lucas_Camara

Não quer por que ficaria bidirecional? Ou pq não acha correto?

C

não é questão de certo ou errado, mas o meu pensamento é o seguinte, eu tenho um produto, nesse produto eu tenho o id do usuario que alterou. se eu fizer o relacionamento com o objeto usuario, na classe produto eu vou ter um objeto usuario que tem outros objetos e por ai vai. mesmo que que eu não carregue eles do banco toda vez que precisar saber qual usuario alterou o produto, quando eu precisar ele vai preencher um objeto usuario que na verdade eu só precisaria do id.
minha questão é se eu criar um banco de dados na mão, eu vou la e adiciono uma foreign key a um campo sem problemas. então eu gostaria que o hibernate fizesse isso por mim sem precisar de um relacionamento com um objeto.

Lucas_Camara

Entendi. Mas mesmo colocando como lazy não ficaria melhor colocando a classe? Pois, se vc usar apenas o ID (Integer), você terá sempre que fazer uma segunda consulta para obter o respectivo objeto relacionado quando for preciso.

C

casos e casos, por exemplo, quando vezes um usuário vai querer saber quem cadastrou um determinado produto no sistema? provavelmente muito poucas vezes mas quando quiser saber não ficaria custoso para o sistema fazer uma nova consultar para buscar quem alterou o usuario.

yhhik

como foi dito você deixar o relacionamento como lazy, mas nada te impede de mapear o relacionamento duas vezes, uma como integer(@column) e outra como entidade(@joinColumn), basta marcar uma delas como insertable e updatable false.

Criado 14 de julho de 2017
Ultima resposta 16 de jul. de 2017
Respostas 11
Participantes 3