我正在努力與Hibernate(數據庫端第一次)和一些如何擊中選擇使用saveOrUpdate或Save.Update 最佳可能的方式我有一個目標POJO類和它的其他屬性需要與Destination實體一起更新。 我正在獲取要導入的XML文件,並且正在使用以下代碼更新/保存目標實體及其屬性類。休眠saveorUpdate方法問題
try{
getSessionFactory().getCurrentSession().beginTransaction();
getSessionFactory().getCurrentSession().saveOrUpdate(entity);
getSessionFactory().getCurrentSession().getTransaction().commit();
}
catch(Exception e){
getSessionFactory().getCurrentSession().getTransaction().rollback();
}
finally{
getSessionFactory().close();
}
一切工作正常,直到我感到instance.but使用同一個會話後來當我使用相同的XML文件以更新某些屬性它給我下面的錯誤目的地PO。
SEVERE: Duplicate entry 'MNLI' for key 'DESTINATIONID'
9 Jan, 2011 4:58:11 PM org.hibernate.event.def.AbstractFlushingEventListener performExecutions
SEVERE: Could not synchronize database state with session
org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:94)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:275)
at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:114)
at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:109)
at org.hibernate.jdbc.AbstractBatcher.prepareBatchStatement(AbstractBatcher.java:244)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2242)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2678)
at org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:79)
我使用UUID作爲目標表和目標表我有一個目的ID是unique.but我可以理解,在secodn情況下休眠主鍵是不是能找到,如果已經有數據庫中相同目標的條目,並試圖執行插入語句而不是更新。
一個可能的解決方案是我可以用戶destinationid檢查是否已經有一個目的地與給定的ID和根據結果我可以發出保存或更新命令。 我的問題是,這可以通過任何其他好方法實現..?
在此先感謝saveOrUpdate()
操作
nt有會話getSessionFactory()。getCurrentSession()在一個變量中的任何原因? – Baz1nga 2011-01-09 12:59:37
你在做一個session.Save()? – Baz1nga 2011-01-09 13:01:07