Grails:数据绑定

时间:2010-04-27 18:46:28

标签: grails

我正在尝试从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)时不会保留。

  1. 上述assignemt有什么问题,或者应该使用id(b.a.id = ..)
  2. 如何查看日志文件中出现的问题?需要启用哪个跟踪。我在配置文件中启用了
  3. 跟踪'org.hibernate.SQL', 'org.hibernate.type'(它给出了插入的sql跟踪,选择等等。但不适用于上述场景,可能是因为它没有达到休眠状态)。

    任何指针,非常感谢..谢谢。

3 个答案:

答案 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属性。建议您使用方法获取严格的结果。