grails文档说默认情况下hasMany是一个集合。
我的域如下所示:
class Employee {
String name;
String empId;
String password;
String contactNumber;
String emailId;
static hasMany = [roles : Role]
static belongsTo = [department : Department]
static constraints = {
contactNumber nullable : true
emailId nullable : true
empId unique : true
roles nullable : true
department nullable : true
}
static mapping = {
sort name : "asc"
}
}
//Role class
class Role {
String role;
String roleId;
}
Controller 中的以下代码允许向“角色”添加重复的条目:
roleListToBeAdded.each { r ->
println "Trying to add ${r}"
try {
employee.addToRoles(r).save(flush:true)
} catch (Exception e) {
println "failed to add ${r}: ${e}"
}
}
为什么会这样呢?
注意:如果 roleListToBeAdded 具有多个相同角色的条目(例如,如果请求JSON看起来像这样:{“rolesToBeAdded”:[{“role”:33},{“role”:33}}),那么它没有添加两次,但是如果说已经添加了角色33,并且我再次使用role:33发出了一个新请求,那么它将在'employee_role'表中再添加一条记录。
最佳答案
您需要向Role类添加适当的equals
和hashCode
,因为“设置唯一性”基于Java相等性而不是数据库身份。等于定义应基于数据(例如角色名称)而不是数据库ID,因为“临时”实例(尚未保存的实例)具有空ID。
关于grails - grails,hasMany,set和重复项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21523376/