2011-05-11 64 views
1

我有兩個表:CompanyRatingRatingMeasureGrails中的一對多映射|我可以使用組合鍵中的生成值嗎?

CompanyRating將有一個一對多的映射與RatingMeasure

這裏是我的領域類:

package com.cedar.ts.bbk 

import java.io.Serializable; 

class CompanyRating implements Serializable { 
    private static final long serialVersionUID = -6435485664486973464L; 

    String cmpName 
    String bbkRating 
    String understanding 
    java.sql.Date reportDate 
    String analystComments 

    List<RatingMeasure> measures = new ArrayList<RatingMeasure>(); 

    static hasMany = [measures: RatingMeasure] 

    static constraints = { 
     cmpName(blank:true) 
     bbkRating(blank:true) 
     understanding(blank:true) 
     reportDate(blank:true) 
     analystComments(blank:true) 
    } 

    static mapping = { 
     id generator:'hilo', params:[table:'hi_value',column:'next_value',max_lo:100] 
     table 'CMP_RATING' 
     version false 
     cmpName column:'CMPNAME' 
     bbkRating column:'BBKRATING' 
     understanding column:'UNDERSTANDING' 
     reportDate column:'REPORTDATE' 
     analystComments column:'ANALYSTCOMMENTS' 
    } 

    def String toString(){ 
     return cmpName ; //+ " " + bbkRating +" " + understanding +" " + analystComments +" " + measures; 
    } 
} 


package com.cedar.ts.bbk 

class RatingMeasure implements Serializable{ 
    private static final long serialVersionUID = -6435485664486973464L; 

    Integer measureID 
    String measure 
    String keyRatios 
    String company 
    String targetValue 
    String indicatorDirection 
    CompanyRating companyRating 

    static belongsTo = [companyRating:CompanyRating] 

    static constraints = { 
     measureID(blank:true) 
     measure(blank:true) 
     measure(blank:true) 
     keyRatios(blank:true) 
     company(blank:true) 
     targetValue(blank:true) 
     indicatorDirection(blank:true) 
    } 

    static mapping = { 
     table 'RATING_MEASURE' 
     version false 
     measureID column:'MSR_ID' 
     measure column:'MEASURE' 
     keyRatios column:'KEYRATIOS' 
     company column:'COMPANY' 
     targetValue column:'TARGETVALUE' 
     indicatorDirection column:'INDICATORDIRECTION' 
     companyRating column:'CMP_ID' 

     measureID generator:'hilo', params:[table:'hi_value',column:'next_value',max_lo:100] 
     id composite:['measureID', 'companyRating'], generator: "assigned" 
    } 

    def String toString(){ 
     return measure; 
    } 
} 

相應RatingMeasure表 - RATING_MEASURE有一個複合主鍵。 其中一個關鍵(measureID)是自動生成的。

然而,當我試圖挽救,我收到以下錯誤:

Property [{0}] of class [{1}] cannot be null 
[Field error in object 'com.cedar.ts.bbk.CompanyRating' on field 'measures.measureID': rejected value [null];,nullable.com.cedar.ts.bbk.CompanyRating.measures.measureID,nullable.measures.measureID,nullable.measureID,nullable]; arguments [measureID,class com.cedar.ts.bbk.RatingMeasure]; default message [Property [{0}] of class [{1}] cannot be null]] 

什麼錯我在幹嘛?我期待measureID被自動分配

回答

1

真的有必要在這裏使用複合ID嗎?如果你使用hilo生成器使用measureId,它已經是唯一的,並且是pk的不錯選擇,所以我不認爲需要複合鍵。

相關問題