当它不是数据库中的id时,我可以映射字段@Id吗?

时间:2015-07-10 15:00:53

标签: sql hibernate jpa

我有一个包含三个字段的数据库表:其中两个是表的复合键,另一个是自动生成的字段,它不是表的id。将此表映射到JPA实体时,是否可以将自动生成的字段映射为@Id,即使它不是?如果是,有什么影响?注意:我无法更改数据库。

2 个答案:

答案 0 :(得分:1)

是的,你可以。实际上,当Hibernate实体映射到在多个真实表(和其他视图)之上定义的数据库视图时,通常就是这种情况。

如果您不想通过Hibernate创建该实体的新实例,那么就没有任何影响(如果密钥当然是唯一的)。

如果你要使用Hibernate持久化新实例,那么一定要选择适当的标识符生成策略。

答案 1 :(得分:0)

您不应该 - @Id具有特殊含义,并将被hibernate用作主键。

@GeneratedValue注释仅在@Id也存在时才有效,因此您不能在非id字段上使用它。更多细节here - 根据您使用的数据库,可能存在其他选择。