2014-03-04 55 views
0

我正在開發一個Grails應用程序將訪問大量遺留數據庫領域類(也將繼續由其他傳統軟件一起使用)。我創建了各種groovy類來模擬遺留數據庫的域模型(因爲它們從多個表中提取數據,所以它們不能成爲實際的grails域模型類,因爲grails/hibernate只能爲每個類執行一個表)。的Grails:與非域類屬性

我現在的工作,將增加新的表到數據庫的應用程序的新部件,所以對於這些我可以用實際Grails領域模型類和具有的Grails /休眠做它的事。我遇到的問題是我的實際grails領域模型類需要有一些假裝領域模型類作爲他們的屬性。然而,休眠失敗了,因爲它不知道如何處理這些僞裝的域模型類。

我正在尋找關於如何處理從設計的角度來看這種情況的建議。我能想到的一種方式是,實際上並不是假裝的域模型類是grails域模型類的屬性,而是存儲某種可以識別/重新創建假冒域模型類的唯一標識符。不過,我希望能有一個更優雅的解決方案,或者如果沒有,那麼可以採取一種自動化的方法,以儘可能避免這種情況。

任何建議,想法等等都大加讚賞。

+0

只是大聲思考 - 你能創建鏡像你的域類的數據庫視圖,但是基於多個表嗎? – aldrin

回答

0

如果你真的不能讓假扮域模型實域模型,你有一個選擇,就是保持在transient屬性假裝域模型類在你的真實域模型類,然後用手Hibernate內部事件管理這些:

class RealDomain { 

    transient pretendDomain 

    def beforeValidate() { /* validate pretendDomain */ } 
    def beforeInsert() { /* save pretendDomain */ } 
    def beforeUpdate() { /* update pretentDomain */ } 
    // and so on 

} 
0

你可以把瞬變的列表在這樣的域對象:

MyObject1 property1 
MyObject2 property2 

static transients = ['property1', 'property2', etc.]