2010-04-27 50 views
0

我想从xml创建一些域对象。Grails:数据绑定

class A { 
    String name 
} 
class B { 
    A a 
    int something 
} 

我首先创建了A的一个实例,并刷新了。在创建B时,首先映射可用属性。

def b = new B(xml.attributes()) 

这将映射“东西”正确的,但不是对象类型A.所以,我检索的实例,并添加像

b.a = A.findByA("id of a") 

我能看到对象B构造(包括字段填充)在调试器中,但它不会保存在保存(flush:true)。

  1. 有什么不对上述assignemt,还是应该使用id来代替(b.a.id = ..)
  2. 我怎么能看到什么是日志文件的问题呢?哪条跟踪需要启用。我能有在配置文件中

跟踪'org.hibernate.SQL', 'org.hibernate.type'(这给插入,选择等,但不针对上述情况,可能是因为它没有达到冬眠SQL跟踪)。

任何指针,高度赞赏..谢谢。

回答

1

我敢打赌,你的save()失败了验证。您可以添加保存(failOnError:真)抛出一个异常时,验证失败,或添加以下代码打印每个错误的:

b.errors.allErrors.each { 
    println it 
} 
+0

+1您的建议。 failOnError显示验证错误。 IllegalStateException:无法将[java.lang.String]类型的值转换为属性“A”所需的类型[com.bsr.test.A]:没有找到匹配的编辑器或转换策略] 我不明白为什么将对象视为字符串,正如我所解释的,在我的IDE中,对象在赋值后正确填充。我正在查看BindData或其他一些方法来添加这个复杂的领域。 – bsr 2010-04-27 21:33:29

+0

没有看到来自您的应用程序的更多代码,我无法帮助诊断这个额外的问题。看来,在验证时,该变量是一个字符串,当该对象是预期的。 – 2010-04-28 14:31:42

0

要创建关联中,你必须通过

new B(a:A.get(id)) 

B b = new B() 
b.a = A.get(id) 

其中ID必须是整数的一个对象或长

无论是我错过了一些上下文,但A类没有findByA方法。 A级没有这样的A属性。建议您使用get方法来获得严格的结果。

+0

谢谢..你是对的,我的例子中接口被错误地使用。收获问题是,在我的xml中(请参阅我创建的对象解析xml,所以我没有id),并使用像.. <?xml version =“1.0”?> 这里的问题是,当我做def b = new B(xml.attributes())时,构造函数试图映射A分开抬头看,因为我还不知道id).. – bsr 2010-04-28 12:00:57