Grails NonUniqueObjectException:具有相同标识符值的另一个对象已与会话关联

时间:2019-03-05 15:17:02

标签: hibernate grails gorm grails-domain-class

我是不熟悉Grails的人-Gorm,所以对您的帮助将不胜感激。我有一个名为“ Employee”的域对象,如下所示:

StopFoo

该员工与一个名为“工作场所”的域具有一对多关系

foo

“国家/地区”和“公司”域是在插件中定义的域对象,已添加了相关性。我在Bootstrap.groovy中填充公司和国家/地区的预定义值。是课程:

super

这就是我保存/更新员工(添加所有相关工作场所之后)的方式

class Employee {

String firstName
String lastName
Set<Workplace> workplaces = new HashSet<>()
static hasMany = [workplaces: Workplace]

static mapping = {
    workplaces cascade: 'all-delete-orphan'
}
}

现在我的问题如下: 当我向员工添加其他工作场所并尝试保存/合并Employee对象时,当且仅当工作场所中的公司和国家/地区代码唯一时,该对象才有效。如果我尝试添加具有相同国家/地区,公司但开始/结束日期不同的工作场所,则会引发以下异常: org.hibernate.NonUniqueObjectException:具有相同标识符值的另一个对象已与会话相关联:[公司] (也可以是国家/地区)

在我看来,GORM试图再次拯救国家和公司,并且由于交易尚未落实,并且以前的工作场所仍在会议中,因此休眠会引发异常。 有什么解决办法吗?我在这里做错了什么?有什么建议么 ? 我正在使用Grails 3.3.9

1 个答案:

答案 0 :(得分:0)

尝试添加到Workplace

static mapping = {
     country cascade: 'refresh,evict'
     company cascade: 'refresh,evict'
}