我设法让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)
答案 0 :(得分:1)
这篇文章帮助我解决了我的问题“link"。 但是来自@nolexa的anser是正确的,而不是来自Alex Gitelman,它实际上被检查为正确。 我把这个
<property name="hibernate.id.new_generator_mappings">true</property>
进入我的hibernate.cfg.xml文件,我现在创建的所有序列都运行正常。非常感谢@nolexa !!