2014-01-12 36 views
-1

Groovy的新功能。所以我有一个超Groovy(Grails)命名参数构造函数不会设置超类字段

class AbstractClass { 
User user 
} 

和子类

class Category extends AbstractClass { 
String name 
} 

,当我尝试创建在BootStrap.groovy中的对象(我使用的Grails),如:

User user1 = new User(...).save(failOnError: true) 
// I know user1 is properly created 
def category1 = new Category(User: user1, name: 'alice').save(failOnError: true) 

好,我的问题是用户字段未被设置。它是空的。这已经改变了:以前,我不是保存用户,而是保存了它的ID(Long id),它正在工作。我在这里错过了什么魔法?

当我更改代码:

def category1 = new Category(User: user1, name: 'alice') 
category1.setUser user1 
category1.save(failOnError: true) 

它工作得很好,所以我想一定是我丢失的东西在这里。

感谢您的帮助!

+0

在第一种情况下,grails可能不会将用户持久保存到数据库,它可能只是在Hibernate Session中 - 您能否尝试添加flush:true为您保存用户的语句并查看是否作品?例如。新用户(...)。save(flush:true,failOnError:true) – bschipp

+0

谢谢bschipp,但它是一个错字。用户应该是用户。 – ldepablo

回答

2

class AbstractClass { 
    User user 
} 

类有

new Category(User: user1, name: 'alice') 

应该

user(小u)和其 User(大写的U)的属性,因此,
new Category(user: user1, name: 'alice') 

以匹配属性名称。请记住,像Java一样,Groovy区分大小写。

+0

废话!错字。谢谢,我已经失去了半个小时的生活。 – ldepablo