Grails 无法保存对象,会话中已存在? [复制]
Posted
技术标签:
【中文标题】Grails 无法保存对象,会话中已存在? [复制]【英文标题】:Grails fails to save object, already exists in session? [duplicate] 【发布时间】:2012-03-27 07:17:36 【问题描述】:可能重复:Spring + Hibernate : a different object with the same identifier value was already associated with the session
我有三个域排列类似于下面的示例:
class Computer
static hasMany = [progStartTimes:ProgStartTime]
static belongsTo = User
static constraints =
name()
operatingSystem()
processor()
User owner
OperatingSystem os
Processor processor
class OperatingSystem
static hasMany = [computers:Computer]
static constraints =
name(blank:false,unique:'versionType',maxSize:80)
versionType()
static mapping =
versionType type:VersionTypeMapping
String name
VersionType versionType
class ProgStartTime implements Serializable
static constraints =
computer()
program()
duration()
static mapping =
id composite:['computer','program']
duration type:DurationMapping
Computer computer
Program program
Duration duration
我有一个控制器,它创建一堆对象并将它们同时保存在一个事务中。保存大约五六个不同批次后它工作正常,但过了一会儿我得到了异常:
org.springframework.orm.hibernate3.HibernateSystemException: a different object
with the same identifier value was already associated with the session:
[diag.ProgStartTime#diag.ProgStartTime : null]; nested exception is
org.hibernate.NonUniqueObjectException: a different object with the same
identifier value was already associated with the session:
[diag.ProgStartTime#diag.ProgStartTime : null]
这是保存对象的控制器代码部分。有谁知道怎么回事?
ownerInstance.withTransaction status ->
try
if (operatingSystem.id == null)
operatingSystem.save()
if (processor.id == null)
processor.save()
startTimes.each
if (it.id == null)
it.save()
catch (Exception e)
ownerInstance.errors.reject("Failed to save the necessary objects: " + e)
status.setRollbackOnly()
【问题讨论】:
【参考方案1】:ProgStartTime 的 id 映射是我在 Grails 中没有经常使用的东西,但是在查找之后,在我看来,通过使用该 composite id,你可以保证ProgStartTime 上的唯一性,没有两个人会同时共享计算机和程序。
如果您违反了该限制,我预计会看到与您所看到的错误类似的错误。根据 ProgStartTime 数据表中的内容检查您输入的数据类型,看看是否是问题所在。如果是其他事情,我会尽我所能提供进一步的帮助:)
出于好奇,您使用的是哪个版本的 grails?
【讨论】:
这是在 Grails 2.0.1 上。我现在正在验证数据。 可能应该只是等待。无论如何,我已经检查了数据并验证了没有重复或冲突。据我所知,这不应该发生,数据方面。它也只发生在某些数据上,而不是随机的,但我不知道这些数据有什么特别之处。 嗯,很有趣。您能否举例说明表中的一些数据,以及导致此错误的示例数据输入? 没有意义。 :-/ 实际 代码有更多字段和大量数据,出于简洁和就业目的,我不能在这里发布。有没有办法让 Grails 更详细地记录或详细说明异常的原因? 编辑:如果你想要一些示例数据,我可以发布一些。您更喜欢哪个域,还是各取一点? 哦,这可能不是一个简单的练习,然后会:/尝试检查这些链接,看看它们是否有帮助! ***.com/questions/4194350/…grails.1312388.n4.nabble.com/…以上是关于Grails 无法保存对象,会话中已存在? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
无法附加分离的实体:“ObjectStateManager 中已存在具有相同键的对象”
ObjectStateManager 中已存在具有同一键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象。
ObjectStateManager 中已存在具有同一键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象
ObjectStateManager 中已存在具有相同键的对象。 ObjectStateManager 无法跟踪具有相同键的多个对象
ObjectStateManager 中已存在具有相同键的对象。 ObjectStateManager 无法跟踪具有相同键的多个对象
ObjectStateManager 中已存在具有同一键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象