0
我设法让hibernate通过将每个表的id加入每个实体类来增加每个表的id。休眠ID增量oracle
@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>
对于其中的数据的两个表我将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。例如,休眠了一个新的实体ID 60,61,而不是23,24等..
这是我的老注释:
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
- 是否有一个正确的方式,告诉休眠一个表已经有 数据,它应该开始计算形成一个特定的数字?
- 或如何摆脱“NonUniqueObjectException”。
你有没有尝试过使用flush()方法从会话对象保存之前? – Lucky
我试过了,flush()has没有效果。我还认为hibernate使用flush()aut在调用transaction.commit()的时候。 –
好的,试试'session.merge(object)'来保存你的数据。 – Lucky