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

问题描述 投票:2回答:1

我是grails的新手 - Gorm所以任何帮助都会受到赞赏。我有一个名为“Employee”的域对象如下:

class Employee {

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

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

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

class Workplace {

Employee employee
Country country
Company company
LocalDate startDate
LocalDate endDate
static belongsTo = [employee: Employee]
}

“国家”和“公司”域是我在插件中定义的域对象,我已经添加了依赖项。我在我的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
}


}

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

 @Transactional
Employee merge(Employee employee) {
    employee = employee.merge()//have tried with flush:true does not work 

    return employee
}

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

对我来说,听起来像GORM试图再次拯救国家和公司,因为交易尚未提交,而且之前的工作场所仍然在会议中,hibernate抛出异常。这有什么解决方案吗?我在这做错了什么?有什么建议 ?我正在使用Grails 3.3.9

hibernate grails gorm grails-domain-class
1个回答
0
投票

尝试添加到Workplace

static mapping = {
     country cascade: 'refresh,evict'
     company cascade: 'refresh,evict'
}
© www.soinside.com 2019 - 2024. All rights reserved.