2017-07-04 107 views
-1

在我的Grails 2.5.X的應用程序,我有一個域類,看起來像這樣:映射生成數據庫列到Grails領域類屬性

class FormData { 

    String submittedFields 
    Boolean submitted 

    static constraints = { 
     submittedFields nullable: true 
    } 

    static mapping = {   
     // can I do something here to map submitted to a generated 
     // column of the form_data table 
    } 
} 

我想給submitted屬性映射到一個產生在form_data列中,即會通過SQL語句

alter table form_data add submitted tinyint 
GENERATED ALWAYS AS (if(submitted_fields is null,0,1)); 

具體而言,當我從域模型,例如創建模式應創建這個生成列創建一個列通過運行schema-export腳本。

submitted映射到生成的列的結果是相應的域類屬性應該是隻讀的,或者至少爲其分配值應該沒有任何影響。

回答

1

如果只想處理數據庫端列的值,並且不希望它從grails/hibernate端插入或更新。可以使列插入:假updatetable:假

static mapping = { 
submitted insertable:false, updateable:false 
} 

現在,即使該值在Grails的改變,新的值不會在數據庫中更新。

+0

感謝您的回覆,這是非常有幫助的,但並沒有回答我的問題的其他部分:我如何讓grails將此列包含在生成的模式中? –

+0

你的意思是數據庫遷移插件? - 這應該生成沒有任何問題的列 –

+0

我的意思是當Grails生成模式時,例如當'schema-export'腳本運行時,或者應用程序以'dbCreate =「create-drop」'模式啓動時。根據目前的情況,Grails無法創建此列,因爲我沒有在域模型中的任何位置定義它的本質,我的意思是提交tinyint GENERATED ALWAYS AS(if(submitted_fields is null ,0,1))' –