我正在尝试从xml创建一些域对象。
class A {
String name
}
class B {
A a
int something
}
我首先创建了一个A的实例,然后刷新了。在创建B时,首先映射可用属性。
def b = new B(xml.attributes())
这会正确地映射'某事',但不会映射对象类型A.所以,我检索A的实例并添加类似
b.a = A.findByA("id of a")
我可以看到在调试器中构造了对象b(两个字段都已填入),但它在save(flush:true)时不会保留。
跟踪'org.hibernate.SQL', 'org.hibernate.type'
(它给出了插入的sql跟踪,选择等等。但不适用于上述场景,可能是因为它没有达到休眠状态)。
任何指针,非常感谢..谢谢。
答案 0 :(得分:1)
我会猜测你的save()验证失败了。您可以添加save(failOnError:true)以在验证失败时抛出异常,或添加以下代码以打印每个错误:
b.errors.allErrors.each {
println it
}
答案 1 :(得分:0)
借助Rich的调试技巧,我可以缩小问题范围......必须重命名该属性以防止自动映射。查看类似问题,并在http://grails.1312388.n4.nabble.com/domain-controller-and-Failed-to-convert-property-value-of-type-problem-td1357947.html
处回复答案 2 :(得分:0)
要创建关联,您必须传递A
的对象new B(a:A.get(id))
或
B b = new B()
b.a = A.get(id)
其中id必须为Integer或Long
要么我想念一些上下文,但是A类没有方法findByA。 A类没有这样的A属性。建议您使用方法获取严格的结果。