hibernate ID增量oracle

时间:2015-08-28 11:34:45

标签: java oracle hibernate annotations primary-key

我设法让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个表,我将initialValue设置为我需要的值。 例如,table 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表已经有了 其中的数据应该从一个特定的数字开始计算?
  • 或如何摆脱&#34; NonUniqueObjectException&#34;。

1 个答案:

答案 0 :(得分:1)

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

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

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