2017-07-04 110 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))' –