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