当我需要比较和操作引用其他对象的对象时,一直遇到问题。例如:
Class Student {
...
String Name
Integer Age
...
}
Class Stuff {
...
Student student
...
}
当我调用Stuff实例(Stuff.get (id)/load(id)
)并将访问我在调试模式下看到的Name,Age和其他属性时(stuff .name = null,它们就像'null',尽管它们不是它。它
分析这些属性的值时的命令(东西
.name ==“pen”)错误发生。
我需要调用实例并比较它们的值来执行业务规则,但不知道如何解决这个问题。
我读了一些关于在配置Stuff Mapping'student lazy: false
'中包含你需要加载实例的所有时间的东西,也给学生收费,但除了重载内存之外(因为东西是一个领域伟大)将解决这个案例是唯一的解决方案,将所有引用放在'懒惰:假',这将减慢应用程序只是为了进行简单的比较。
有没有人知道如何调用实例(Stuff),自动调用属性工作(学生)只是为了进行数据比较,而不使用始终调用数据的“student lazy: false
”? ...
使用Grails 2.2.0 e o Groovy 2
答案 0 :(得分:1)
Stuff
没有名为name
的媒体资源,因此您应该MissingPropertyException
拨打stuff.name
。这与懒惰或渴望的关系无关。
您可以查看懒惰关系的定义in the documentation以及the difference between the types of fetch。
要访问name属性,您需要先访问student属性:
Stuff instance = Stuff.get(id)
println instance.student.name //this, if lazy, will trigger a new database query.
如果您知道您的代码将通过与Stuff的关系访问Student实例,那么您可以在一个数据库访问中获取两者(渴望而不是懒惰):
Stuff instance = Stuff.withCriteria {
eq('id', id)
fetchMode("student", FetchMode.JOIN)
}