gpt4 book ai didi

java - 填充主键的 Hibernate saveOrUpdate

转载 作者:太空宇宙 更新时间:2023-11-04 14:07:03 24 4
gpt4 key购买 nike

我的表有 2 个字段 id - 唯一、NotNull 和 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)

但是如果我使用保存方法只是为了插入新行,效果也是一样的。

任何帮助都将非常感激。

最佳答案

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

来自 documentation

saveOrUpdate() 执行以下操作:

如果该对象已在此 session 中持久化,则不执行任何操作

如果与 session 关联的另一个对象具有相同的标识符,则抛出异常

如果对象没有标识符属性,则 save() 它

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

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

否则 update() 对象

关于java - 填充主键的 Hibernate saveOrUpdate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28757493/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com