問題は次のクエリにあります。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 {
}
}
}
これにより、同じ元のエラーが発生します。何かが正しくありません。