2014-01-12 32 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