2012-12-11 46 views
2

舊的數據庫複合鍵模型是如何來模擬Grails中的遺留數據庫複合鍵如何Grails的

我有一個傳統的DB由Grails領域建模的三個表對象

class Foo { 

    static hasMany = [bars: Bar] 

    static mapping = { 
     version false 

     columns { 
      id column: "FooId" 
      fooProp column: "FooProp"   
     } 
    } 
} 

class Bar implements Serializable{ 

    Baz baz 

    static hasMany = [foos: Foo] 

    static belongsTo = [Foo] 

    static mapping = { 
     version false 

     columns { 
      id composite: ["FooId", "BazId"] 
      baz column: "BazId" 
      barProp column: "BarProp" 
     } 
    } 
} 

class Baz { 

    static hasMany = [bars: Bar] 

    static mapping = { 
     version false 

     columns { 
      id column: "BazId" 
      bazProp column: "BazProp" 
     } 
    } 
} 

但當我嘗試部署這個時,我得到以下異常

由org.springframework.beans.factory.BeanCreationException引發:創建具有名稱'transactionManager'的bean時出錯:無法在設置bean屬性'bean'時解析對bean'sessionFactory'的引用「會議廠';嵌套異常是org.springframework.beans.factory.BeanCreationException:創建名爲'sessionFactory'的bean時出錯:init方法的調用失敗;嵌套的異常是org.hibernate.HibernateException:失蹤的列:應用程序中的ID

我寧願沒有複合鍵,但我有嚴格的命令不要觸摸數據庫,所以現在我盡我所能它的模式,但組合鍵已經證明了有些困難......

+0

我很確定你需要在Bar類中定義FooId和BazId作爲屬性。請參閱grails文檔第6.5.2.5節,您將看到它將firstName和lastName定義爲Strings,然後引用組合鍵的那些。您正在定義兩個未定義爲組合鍵的字段。 http://grails.org/doc/latest/guide/single.html#identity – Todd

回答