Java Hibernate saveOrUpdate,主键已填充

Java Hibernate saveOrUpdate,主键已填充,java,hibernate,Java,Hibernate,我的表有两个字段 id-唯一、不为null和Seq 名称-Varchar 在空桌子上,我以 id=1(手动填写id值) 名称=‘示例’ 我使用saveOrUpdate的目的是,当数据库中没有Id为1的记录时,如果不更新现有记录,则需要插入Id为1的新行 DAO.getInstance().saveOrUpdate(object, session); 在使用saveOrUpdate时,我得到以下异常 ERROR - tractFlushingEventListener - Could not s

我的表有两个字段 id-唯一、不为null和Seq 名称-Varchar

在空桌子上,我以
id=1(手动填写id值)
名称=‘示例’

我使用saveOrUpdate的目的是,当数据库中没有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方法插入新行,同样也可以

任何帮助都非常有用。

如果内存中存在id,则saveOrUpdate()将执行更新,如果没有id,则插入新行

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)
如果对象没有标识符属性,则保存它()

如果对象的标识符具有分配给新实例化对象的值,则将其保存()

如果对象由or进行版本控制,并且版本属性值与分配给新实例化对象的值相同,则保存()它

否则,更新()对象