gpt4 book ai didi

hibernate - @GenerateValue with Strategy=GenerationType.AUTO 重启后生成重复值

转载 作者:行者123 更新时间:2023-12-02 19:08:20 25 4
gpt4 key购买 nike

我有一个 ID 配置为的 hibernate 实体

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;

新元素的创建在第一次运行时工作正常。但是,如果我重新启动应用程序并检索记录,下次我尝试保留该实体时,hibernate 会尝试使用应用程序未重新启动时生成的相同 ID。

我收到以下错误,当使用跟踪选项运行时,我能够看到 ID 正在被重用

*Hibernate: insert into org_myEntity (entitiyJID, entitityName, id) values (?, ?, ?) org.hibernate.util.JDBCExceptionReporter
SQL Error: 20000, SQLState: 23505 org.hibernate.util.JDBCExceptionReporter The statement was aborted because it would have caused a duplicate key value in a unique or primary key constraint or unique index identified by 'SQL120725164357680' defined on 'TABLE_NAME'. org.hibernate.event.def.AbstractFlushingEventListener
Could not synchronize database state with session org.hibernate.exception.ConstraintViolationException: could not*

顺便说一下,我使用的是 hibernate 3.3.2.GA、javax.persistance 2.0.0 和 Derby 10.5.1 数据库

有人知道我这一代人可能出了什么问题以及如何解决它吗?

最佳答案

如果您使用 AUTO,Hibernate 将选择其中一种策略来生成您的 id。来自引用:

AUTO - either identity column, sequence or table depending on the underlying DB.

因此,您必须查看生成的 id 才能了解 Derby 使用的策略。尽管看起来像,但每次重新启动应用程序时它都会重置生成器。尝试设置

<prop key="hibernate.hbm2ddl.auto">update</prop>

不过,您可以使用序列生成器快速修复它。喜欢:

@Id
@GeneratedValue(strategy=GenerationType.AUTO, generator="my_seq_gen")
@SequenceGenerator(name="my_seq_gen", sequenceName="ENTITY_SEQ")
private Long id;

其中 ENTITY_SEQ 是数据库中序列的名称(您手动创建一个)。

关于hibernate - @GenerateValue with Strategy=GenerationType.AUTO 重启后生成重复值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11653497/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com