java - Grails:无法访问具有hasMany Relation的集合(无此类属性)

标签 java intellij-idea grails

我目前正在为所构建的域类进行单元测试。但是由于某些原因,我无法访问“hasMany”实现中的元素。

当我尝试访问属性“module.exams”时,它引发了一个异常groovy.lang.MissingPropertyException:无此类属性:类ch.fhnw.webec.Module的考试。

我见过无数个人们访问该属性(property)的例子。我尝试了考试,getExams,addTo等,但是没有任何效果。

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

关于java - Grails:无法访问具有hasMany Relation的集合(无此类属性),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55404244/

相关文章:

Grails Controller 测试在渲染模板时对模型进行断言?

java - 如何解决 Android Studio 中的 Phenotype API 错误?

java - 没有任何配置的tomcat 7部署速度慢

java - 在倒数计时器中启动另一个计时器

java - IntelliJ IDEA 可以显示所有违反 Nullable 注释的列表吗

grails - 使用图像名称上传Grails文件

java - 包私有(private)类中的公共(public)方法

java - 在 Windows 10 上使用 Intellij IDEA 在 WSL 2 中运行和调试 Java

android - 无法将 Maven 的库包含到 Android Studio

grails - 使用URL映射使URL转换失败