Grails:无法访问 hasMany 关系集(没有这样的 属性)
Grails: Can't access set of hasMany Relation (No such property)
我目前正在为我构建的域 classes 进行单元测试。但出于某种原因,我无法访问 'hasMany' 关系中的元素。
当我尝试访问 属性 'module.exams' 时,它抛出异常 groovy.lang.MissingPropertyException:没有这样的 属性:class 的考试:ch.fhnw.webec.Module.
我见过无数人们访问 属性 的例子。我尝试了 exams、getExams、addTo 等,但 none 有效。
void 'test module relation'() {
Teacher teacher = new Teacher(prename: "Max", surname: "Mustermann")
Module module = new Module(name: "Workshop 1", shortName: "WS2", credits: 3, year: 2019, isSpring: true, teacher: teacher)
Exam exam1 = new Exam(module: module, name: "Prüefung 01", isMsp: false, number: 1, weight: 1, date: Date.parse("yyyy-MM-dd", "2019-03-28"))
Exam exam2 = new Exam(module: module, name: "Prüefung 01", isMsp: false, number: 1, weight: 1, date: Date.parse("yyyy-MM-dd", "2019-03-28"))
expect:
module.exams.count() == 2 // <-- this line
}
package ch.fhnw.webec
class Module {
// ....
static hasMany = [exams: Exam]
// ...
}
通过尝试错误和互联网上的大量问题,我找到了解决方案。我没有删除问题,而是想解释解决方案。也许这也可以帮助其他试图解决这个问题的人:
感谢 JeffScottBrown 指出这一点:
默认情况下,它会创建一个集合。这意味着 addToXXX 确实有效。
但就我而言,我需要一个列表,这是我必须添加的内容:
class Module {
static hasMany = [exams: Exam]
List exams
// ...
}
但是添加这些还不够。创建对象时,您必须通过生成的 'addToXY' 方法将它们添加到此列表:
module.addToExams(exam1)
module.addToExams(exam2)
assert module.exams.size() == 2
我目前正在为我构建的域 classes 进行单元测试。但出于某种原因,我无法访问 'hasMany' 关系中的元素。
当我尝试访问 属性 'module.exams' 时,它抛出异常 groovy.lang.MissingPropertyException:没有这样的 属性:class 的考试:ch.fhnw.webec.Module.
我见过无数人们访问 属性 的例子。我尝试了 exams、getExams、addTo 等,但 none 有效。
void 'test module relation'() {
Teacher teacher = new Teacher(prename: "Max", surname: "Mustermann")
Module module = new Module(name: "Workshop 1", shortName: "WS2", credits: 3, year: 2019, isSpring: true, teacher: teacher)
Exam exam1 = new Exam(module: module, name: "Prüefung 01", isMsp: false, number: 1, weight: 1, date: Date.parse("yyyy-MM-dd", "2019-03-28"))
Exam exam2 = new Exam(module: module, name: "Prüefung 01", isMsp: false, number: 1, weight: 1, date: Date.parse("yyyy-MM-dd", "2019-03-28"))
expect:
module.exams.count() == 2 // <-- this line
}
package ch.fhnw.webec
class Module {
// ....
static hasMany = [exams: Exam]
// ...
}
通过尝试错误和互联网上的大量问题,我找到了解决方案。我没有删除问题,而是想解释解决方案。也许这也可以帮助其他试图解决这个问题的人:
感谢 JeffScottBrown 指出这一点: 默认情况下,它会创建一个集合。这意味着 addToXXX 确实有效。 但就我而言,我需要一个列表,这是我必须添加的内容:
class Module {
static hasMany = [exams: Exam]
List exams
// ...
}
但是添加这些还不够。创建对象时,您必须通过生成的 'addToXY' 方法将它们添加到此列表:
module.addToExams(exam1)
module.addToExams(exam2)
assert module.exams.size() == 2