m:nの関係を持つレガシーデータベースと、リレーションのいくつかの追加の属性がある場合、どのようにこれをsquerylで定義できます。最後にテーブルは次のようになります。Squerylの追加属性とm:nの関係を定義する方法は?
3つのテーブルを手動で定義しても問題はありません。しかし、私が現時点でのドキュメント(0.9.4)を理解している限り、関係の追加属性を使用して多対多の関係を定義する可能性はありません。
私は3つのテーブルと2つの1対多の関係に定義理由です:それはテーブルAとRelABとの間の関係を定義するのは簡単です
// TableA
class TableA(val id: Int, ...) extends KeyedEntity[Int] {
def this() = this(0, ...)
}
// TableB
class TableB(val compkey1: Int, val compkey2: Int, ...)
extends KeyedEntity[CompositeKey2[Int, Int]] {
def id = CompositeKey2(compkey1, compkey2)
}
// Rel_A_B
class RelAB(val tabA: Int, val tabB1: Int, val tabB2: Int, val value: String,
val date: Date) extends KeyedEntity[CompositeKey3[Int, Int, Int]] {
def id = CompositeKey3(tabA, tabB1, tabB2)
}
を。
val relA =
oneToManyRelation(tableA, relAB).
via((a, r) => a.id === r.tableA)
しかし、私は2番目の関係を定義する方法はありません。私はすでにTABLEBからちょうど列を含む(compkeyBという名前の)関係テーブルに追加の合成値を定義し、テーブルBの複合キーと比較してみましたが、これは動作しません:
val relB =
oneToManyRelation(tableB, relAB).
via((b, r) => b.id === r.compkeyB)
それはスロー"タイプの不一致"の例外:
found : org.squeryl.dsl.ast.LogicalBoolean
required: org.squeryl.dsl.ast.EqualityExpression
これを解決する方法はありますか?
あなたはこの制限にかまされている
よりもむしろ(またはそれに加えて)は、あなたの可能性例外を生成している現在の壊れたコードを含めますか? –
@Damien:サンプルを追加しました。基本的には作業コードと同じですが、CompositeKey2のvalを使用しています。これは明らかにEqualityExpressionにつながりません。 – Steffen
質問をsquerylメーリングリストに投稿することをお勧めします。 – Christian