Grails 3域类组成

时间:2017-06-14 19:41:26

标签: grails dns composition

使用Grails 3.2.5,hibernate 5.1.2核心。

我有一个遗留数据库,表中有几个clob。为了避免急切的提取,在Grails的早期版本中,我定义了一个只包含那些clob的域类,以便通过(明显的)关联访问它们,然后可以懒惰地获取它们。设置草图:

class Comment {
    String someField        // eager
    CommentText cmntText    // lazy

    static mapping = {
      id column: 'COMMENT_ID', generator:'sequence', params:[sequence:'cmnt_seq']
}

In a separate domain class file:

class CommentText {
   String userComment
   static mapping = {
     table 'COMMENT'
     id generator:'assigned'
     userComment sqlType:'clob'
}

As noted, clob column 'user_comment' exists in the single table 'COMMENT'.

在3.2.5中,当我这样做时,我得到一个错误,即列' comment_text_id'没有在表格中定义'评论'。这种情况并非如此,该领域也不应该存在。

在类似的说明中,在另一种情况下,我定义了一个复合域类(在与实际域类相同的文件中定义的类)。在这种情况下,我也会收到有关缺少ID的错误:

class A {
    B b
}

class B {
   String someField
}

在这种情况下,我收到一条错误消息,表示字段b_id不在表格中#A;#39;但是 - 它应该是嵌入式组合,它不应该存在。

如果相关,我会在Intellij内建立。

1 个答案:

答案 0 :(得分:1)

使用GORM 6.1,现在可以使用单个域类

import grails.gorm.hibernate.annotation.ManagedEntity
import static grails.gorm.hibernate.mapping.MappingBuilder.*

@ManagedEntity
class Comment {

    String someField
    String userComment

    static constraints = {
    }

    static final mapping = orm {
        id {
            generator("sequence")
            params(sequence:'cmnt_seq')
        }
        userComment = property {
            lazy(true)
            column {
                sqlType 'clob'
            }
        }
    }

}