Hibernate Grails UnuniqueObjectException:具有相同标识符值的不同对象已与会话关联
我是grails-Gorm的新手,因此任何帮助都将不胜感激。我有一个名为“Employee”的域对象,如下所示:Hibernate Grails UnuniqueObjectException:具有相同标识符值的不同对象已与会话关联,hibernate,grails,gorm,grails-domain-class,Hibernate,Grails,Gorm,Grails Domain Class,我是grails-Gorm的新手,因此任何帮助都将不胜感激。我有一个名为“Employee”的域对象,如下所示: class Employee { String firstName String lastName Set<Workplace> workplaces = new HashSet<>() static hasMany = [workplaces: Workplace] static mapping = { workplaces cascade: '
class Employee {
String firstName
String lastName
Set<Workplace> workplaces = new HashSet<>()
static hasMany = [workplaces: Workplace]
static mapping = {
workplaces cascade: 'all-delete-orphan'
}
}
“Country”和“Company”域是在我添加了依赖项的插件中定义的域对象。我在Bootstrap.groovy中填充公司和国家的预定义值。以下是类:
class Company {
String cmpCode
static constraints = {
cmpCode blank: false, maxSize: 255, unique: true
}
}
class Country {
String ctyCode
static constraints = {
ctyCode blank: false, maxSize: 255, unique: true
}
Country(String ctyCode) {
this.ctyCode = ctyCode
}
}
这就是我保存/更新员工的方式(添加所有相关工作场所后)
现在我的问题如下:
当我向我的员工添加不同的工作场所并尝试保存/合并员工对象时,如果且仅当我工作场所中的公司代码和国家代码是唯一的,则该操作有效。如果我尝试添加具有相同国家/地区、公司但开始/结束日期不同的工作场所,则会引发以下异常:
org.hibernate.unUniqueObjectException:具有相同标识符值的不同对象已与会话关联:[Company](也可以是国家/地区)
对我来说,这听起来像是GORM再次试图拯救国家和公司,由于交易尚未提交,而之前的工作场所仍在会话中,hibernate抛出异常。
有什么解决办法吗?我做错了什么?有什么建议吗?
我正在使用Grails3.3.9尝试添加到Workplace
class Workplace {
Employee employee
Country country
Company company
LocalDate startDate
LocalDate endDate
static belongsTo = [employee: Employee]
}
static mapping = {
country cascade: 'refresh,evict'
company cascade: 'refresh,evict'
}
您能否添加调用
merge
服务的逻辑方式和位置?我想这会给我们提供更多的线索来帮助你。
static mapping = {
country cascade: 'refresh,evict'
company cascade: 'refresh,evict'
}