0

問題は次のクエリにあります。ID が「I01」の I を含む L 内のすべての LI:s をリストしたいと考えています。

クエリ:

def c = L.withCriteria {
  lis {
    i {                   
      eq("id","I01")                                 
    }
  }
}

列「I_ALIAS2X2_.ID」が見つかりません。SQL ステートメント: this_.id を id4_1_ として、this_.version を version4_1_ として、lis_alias1x1_.i_id を i1_7_0_ として、lis_alias1x1_.l_id を l2_7_0_ として、lis_alias1x1_.version を version7_0_ として選択します。 (i_alias2x2_.id=?)) [42122-164]

私の基準に何か問題がありますか、それとも私のドメインが正しくありませんか? 「long id」を LI ドメインに追加し、「id: composite...」行をコメント アウトすると、条件は正常に実行されます。

ドメイン:

class L {
long id   
//can this hasMany be used here ? domain L is the other FK in LI domain
static hasMany = [lis: LI]

static mapping = {       
    lis: joinTable: false       
}

static constraints = {
}
}

import org.apache.commons.lang.builder.HashCodeBuilder

class LI implements Serializable {
//domain has only FK:s to L and I

static belongsTo = [l: L, i: I]

static mapping= {
    table "LI"
    id composite:['i', 'l']
    i column: 'i_id'
    l column: 'l_id'       
}

static constraints = {
}

boolean equals(other) {        
    if (!(other instanceof LI)) { return false }       
    other.l == l && other.i == i       
}

int hashCode() {        
    def builder = new HashCodeBuilder()
    builder.append l
    builder.append i
    builder.toHashCode()            
}
}

class I {
String id       
static mapping = {   
    table "I"       
    id generator:'assigned'
    version: false   
}   
static constraints = {
}
}

ブートストラップ:

    I ii = new I(id:"I01").save(flush:true)           
    I ii2 = new I(id:"I02").save(flush:true)

    L l = new L().save(flush:true);           
    L l2 = new L().save(flush:true);       

    LI li = new LI(l:l,i:ii).save(flush:true)       
    LI li2 = new LI(l:l2, i:ii2).save(flush:true)

スキーマ:

create table I (id varchar(255) not null, version bigint not null, d varchar(255) not null, primary key (id)); create table LI (i_id varchar(255) not null, l_id bigint not null, version bigint not null, primary key (i_id, l_id)); テーブル LI の変更 制約の追加 FK97D312CFA 外部キー (i_id) 参照 I; テーブル LI の変更 制約の追加 FK97D328A1A 外部キー (l_id) 参照 l;

編集:

Sérgioのソリューションは機能しますが、ドメインがある場合は次のように定義しました:

クラス I { 文字列 ID

static belongsTo=[A:a] //has only 'string id' column

static mapping = {   
    table "I"       
    id generator:'assigned'
    version: false   
}   
static constraints = {
}
}

次に、これは機能しません:

def c = L.withCriteria {
  lis {
    i {                   
      eq("a.id","A01")                                 
    }
  }
}

あなただけを書く場合:

def c = L.withCriteria {
  lis {
    i {                   

    }
  }
}

これにより、同じ元のエラーが発生します。何かが正しくありません。

4

1 に答える 1

0

ここで同じエラーが発生しました。それは基準に関するものですが、少し異なる作品を書くこと:

def c = L.withCriteria {
  lis {
    eq('i.id',"I01") 
  }
}
于 2012-10-31T00:33:49.043 に答える