è possivel definir uma chave estrangeira para uma propiedade que não seja um objeto?
Hibernate
11 Respostas
Sim. Basta anotar com @Column(name = "nome_coluna_fk").
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;
Rapaz, até onde sei, não é possível. As anotações @ManyToOne e @JoinColumn são usadas apenas para entidades relacionadas.
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.
E pq você não pode colocar a classe?
eu posso, mas não queria kk
Não quer por que ficaria bidirecional? Ou pq não acha correto?
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.
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.
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.
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.