【问题标题】:Hibernate entities auto-increment id's across tables rather than per tableHibernate 实体跨表而不是每个表自动增加 id
【发布时间】: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 计数器在三个不同的表之间共享?我应该使用其他或不同的标签吗?

谢谢。

【问题讨论】:

    标签: java mysql hibernate auto-increment


    【解决方案1】:

    这可能是因为hibernate为id序列生成了一张表。您正在使用哪个数据库? MySQL?或另一个不使用序列的数据库?您可以尝试使用:

     @GeneratedValue(strategy = GenerationType.IDENTITY)
    

    【讨论】:

    • 谢谢!这适用于我的 MySql,后来也适用于 posgresql。
    • 但是如果您必须将您的数据库迁移到 oracle,那么它将无法工作,因为 oracle 不支持身份。在这种情况下你有什么建议会是一个不错的选择>
    • 将生成类型从 AUTO 更改为 IDENTITY 后出现此错误:字段 'id' 没有默认值。
    猜你喜欢
    • 2012-05-12
    • 1970-01-01
    • 2020-10-27
    • 1970-01-01
    • 2015-11-11
    • 1970-01-01
    • 1970-01-01
    • 2013-04-26
    • 1970-01-01
    相关资源
    最近更新 更多