2017-06-14 72 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