2017-06-14 69 views
0

用Grails 3.2.5,hibernate 5.1.2核心。Grails 3域类组成

我有了一个表中的几个CLOB的旧的数据库。为了避免急切的抓取,在Grails的早期版本中,我定义了一个只包含那些clobs的域类,以便通过一个(明显的)关联来访问它,然后这个关联可以被延迟地获取。设置的草图:

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”。但是 - 它应该是嵌入式组合,它不应该在那里。

我在Intellij内建立,如果这是相关的。

回答

1

随着格姆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' 
      } 
     } 
    } 

} 
+0

我试图改变的build.gradle更新我的项目。但是,它找不到ManagedEntity导入,并且不认为Comment是一个域类。我不确定Grails 3.2.5或3.2.8是否会强制使用Gorm版本,这是我的问题或其他问题。我假设我不必使用dsl版本的映射,但是如果我恢复到可以编译的旧样式,但userComment不会延迟加载。 – Jay

+0

呵呵,我的build.gradle: 编译“org.grails.plugins:hibernate5:6.0.11”// JTP compile“org.hibernate:hibernate-ehcache” – Jay