2013-02-08 53 views
0

我有兩個類ClassA和ClassB的如何在grails中獲取域類的實例?

class ClassA{ 
    String userName 
    String passwd 

    ..... 
} 

class ClassB extends ClassA{ 
    String address_line1 
    String address_line2 

    ..... 
} 

如果我quering

ClassA obj = ClassA.get(1) 

我得到ClassB的實例。我如何獲得ClassA的實際實例?

感謝

Nimmy ..

回答

0

你必須使用這樣的代碼:

def obj = ClassA.get(1) 

你打的格姆陷阱之一,目前是SpringSource的博客必須閱讀的文章: http://blog.springsource.org/2010/07/28/gorm-gotchas-part-3/(Chapter Proxies)。我建議閱讀所有3篇文章!你會明白,什麼是在引擎蓋下更好:-)

其他信息。默認情況下,Grails在映射類層次結構時使用「每層表的層次」策略,所以如果您創建的是ClassB,則它將保存在類似ClassA的表中,因此它們共享相同的主鍵列。這就是爲什麼你得到ClassB而不是ClassA。 GORM根據類型列返回正確的類實例,該列包含信息,層次結構的哪個類存儲在所需的行中。但是,如果你想要,你可以明確地重新打字;-)