gpt4 book ai didi

java - hibernate ID增量oracle

转载 作者:行者123 更新时间:2023-12-01 11:11:47 25 4
gpt4 key购买 nike

通过将其放入每个实体类中,我设法让 hibernate 将每个表的 id 加 1。

@Entity
public class TestObject implements Serializable{

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator="idgen")
@SequenceGenerator(
name="idgen",
sequenceName="testobject_seq",
allocationSize=1,
initialValue=1
)

我有两个表,我通过 Oracle SQL Developer 手动填充数据。创建表格后。

<property name="hibernate.hbm2ddl.auto">create</property>

对于其中包含数据的 2 个表,我将初始值设置为我需要的值。例如,表 testchamber 有 22 行数据。所以我的注释更改为:

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator="idgen")
@SequenceGenerator(
name="idgen",
sequenceName="testchamber_seq",
allocationSize=1,
initialValue=23
)

但是当我尝试保存新的 testChamber 实体时,我收到此错误。

org.hibernate.NonUniqueObjectException: A different object with the same identifier value was already associated with the session

在更改注释之前,我可以毫无问题地保存我的实体,但使用旧注释, hibernate 会随机增加 id。例如,hibernate 为新实体提供了 id 60、61,而不是 23、24 等。

这是我的旧注释:

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
  • 有没有正确的方法,告诉 hibernate 表已经里面有数据,它应该从一个特定的数字开始计数?
  • 或者我怎样才能摆脱“NonUniqueObjectException”。

最佳答案

这篇文章帮助我解决了我的问题“link" 。但是来自 @nolexa 的 anser 是正确的,而不是来自 Alex Gitelman 的,后者实际上已被检查为正确。我把这个

<property name="hibernate.id.new_generator_mappings">true</property>

进入我的 hibernate.cfg.xml 文件,我创建的所有序列现在都可以正常工作。非常感谢@nolexa!!

关于java - hibernate ID增量oracle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32270146/

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