2011-05-11 2 views
1

私は2つのテーブルきた:CompanyRatingRatingMeasureGrailsの1対多マッピング|複合キー内で生成された値を使用できますか?

CompanyRatingはここRatingMeasure

で1対多のマッピングを持っていますが、私のドメインクラスです:

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)の1つは自動生成されたものです。

しかし、私は、次のエラーを取得しています保存しようとすると:

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を使用するのは本当に必要ですか?ヒロジェネレータでmeasureIdを使用しているのであれば、それはすでにユニークでpkに適しているので、コンポジットキーが不要です。

関連する問題