Hibernate 实体跨表而不是每个表自动增加 id
Posted
技术标签:
【中文标题】Hibernate 实体跨表而不是每个表自动增加 id【英文标题】:Hibernate entities auto-increment id's across tables rather than per table 【发布时间】:2017-06-04 14:09:29 【问题描述】:目前我有三个表:Company、Group、Person。
这三张表是通过Company和Group是一对多连接的,Group和Person是一对多的。
在所有三个类(Company.java、Group.java、Person.java)中,我都以这种方式编写了自增唯一 ID:
@Id
@Column(name = "id")
@GeneratedValue
private int id;
然后我按以下顺序实例化所有三个类:Company、Group、Person。
将这些对象保存到我的数据库后,我注意到表中的 id 有问题。
显然,不是按照 1、2、3、4 等顺序增加 Company 的 id;它在 1、4、7、10...
在同样的逻辑中,Group 的 id 为 2、5、8、11...
我应该怎么做才能防止@GeneratedValue 计数器在三个不同的表之间共享?我应该使用其他或不同的标签吗?
谢谢。
【问题讨论】:
【参考方案1】:这可能是因为hibernate为id序列生成了一张表。您正在使用哪个数据库? mysql?或另一个不使用序列的数据库?您可以尝试使用:
@GeneratedValue(strategy = GenerationType.IDENTITY)
【讨论】:
谢谢!这适用于我的 MySql,后来也适用于 posgresql。 但是如果您必须将您的数据库迁移到 oracle,那么它将无法工作,因为 oracle 不支持身份。在这种情况下你有什么建议会是一个不错的选择> 将生成类型从 AUTO 更改为 IDENTITY 后出现此错误:字段 'id' 没有默认值。以上是关于Hibernate 实体跨表而不是每个表自动增加 id的主要内容,如果未能解决你的问题,请参考以下文章