我是不熟悉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
答案 0 :(得分:0)
尝试添加到Workplace
static mapping = {
country cascade: 'refresh,evict'
company cascade: 'refresh,evict'
}