我正在使用以下方法將對象集合保存到數據庫。休眠模板SaveOrUpdateALL主鍵自動生成
public Collection save(Collection instances) {
try {
this.getHibernateTemplate().saveOrUpdateAll(instances);
this.getHibernateTemplate().flush();
} catch (RuntimeException re) {
throw re;
}
return instances;
}
實例的主鍵是由HibernateTemplate自動生成的。在JVM啓動後,當第一次調用這個方法時,Hibernate運行下面的查詢來獲取Max實例上使用的主鍵。從table_name的
但執行方法的第二個時間
選擇MAX(主鍵ID),我沒有看到執行此查詢。看起來像hibernate在會話中的某個地方存儲了這個值。
現在,如果表由另一個進程(可以說是一個存儲過程或SQL)進行更新,則對ORA-00001:唯一約束(SCHEMANAME.PRIMARY_KEY_CONSTRAINT)的所有後續調用都將失敗,從而違反了異常。如果JVM重新啓動,Hibernate再次執行max(主鍵)生成查詢,並且一切正常。
有人可以幫助我做什麼,以確保主鍵自動生成查詢在每次執行該方法時(而不僅僅是第一次)運行。謝謝。
該屬性設置在哪裏?它在Hibernate配置屬性中。謝謝你的幫助。我沒有廣泛使用Hibernate,但你提供的鏈接是有幫助的。 – Ravi 2012-04-17 02:59:42
我在Hibernate Table映射配置文件中找到了id生成器。但將其更改爲增量以外的任何內容都會引發Hibernate映射異常,並說該ID生成器不能實例化。 –
Ravi
2012-04-17 03:16:59