2012-12-08 93 views
-1

我有一個關於grails域類的相當簡單的問題。我不知道我知道如何正確地使用它,因爲我似乎無法在Google上找到答案。grails域類暴露java類的id

我有一個時髦的領域類

class DomainObject { 
    String name 
    String email 
} 

,並使用該域對象的Java類。

public class DomainUser { 
    public void method() { 
     DomainObject object = new DomainObject(); 
     object.getId(); 
    } 
} 

但是我上線

object.getId();

消息得到一個錯誤:

方法getId()是未定義類型

如何暴露因爲它是由grails應用程序自動生成的,所以它是java類的id陽離子/休眠?

+0

什麼給你錯誤? 'grails compile'還是你的IDE?在編譯時通過AST轉換爲Grails artefact類添加了許多半魔法的東西(其中一個是用於域類的'getId()'),如果您的IDE不知道這些轉換,它將失敗。 –

+1

此外,Grails會通過元類機制覆蓋域類構造函數,以使諸如將服務自動裝入域的工作正常工作。所以如果你想在Java代碼中「新」一個域類,你應該使用InvokerHelper.invokeNoArgumentsConstructorOf(DomainClass.class)這是調用metaclass提供的構造函數的Java方法,而不是真正的。 –

回答

1

Id字段在運行時生成,java不知道關於動態引用的任何信息。 從服務層訪問該域。 http://grails.org/doc/latest/guide/services.html#usingServicesFromJava

也是谷歌: 「Grails的接入服務的Java」

第一個結果是http://grails.1312388.n4.nabble.com/Question-How-do-I-reference-a-Grails-service-from-within-Java-class-td1462056.html

你可以寫一些像這樣的事情在你的DomainService.groovy

class DomainService(){ 
    def persistAndGetNewDomain(){ 
     new Domain().save(flush:true)  
    } 
} 

還必須添加id域爲您的域名類

class DomainObject { 
    Long id 
    String name 
    String email 
}