我的桌子有两个字段 id - unique,NotNull和Seq name - Varchar
在空桌上我发送记录为
id = 1 (Filling the id value manually)
name = 'sample'
我使用saveOrUpdate的意图是当DB中没有Id:1的记录时,我需要插入Id:1的新行,如果没有更新现有记录。
DAO.getInstance().saveOrUpdate(object, session);
使用saveOrUpdate
我收到以下异常
ERROR - tractFlushingEventListener - Could not synchronize database state with session
org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [com.floreantpos.model.MenuCategory#2]
at org.hibernate.persister.entity.AbstractEntityPersister.check(AbstractEntityPersister.java:1769)
at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2412)
at org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:2312)
at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2612)
at org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:96)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279)
但如果我使用save方法插入新行,那么同样有效。
任何帮助都会非常明显。
答案 0 :(得分:0)
saveOrUpdate()执行以下操作:
如果对象在此会话中已经持久化,则不执行任何操作
如果与会话关联的另一个对象具有相同的标识符,则抛出异常
如果对象没有标识符属性,则保存()它
如果对象的标识符具有分配给新实例化对象的值,则保存()它
如果对象是由or版本化的,并且version属性值是分配给新实例化对象的相同值,则保存()它
否则更新()对象