優れた squeryl ORM フレームワークを使用して単純な BaseDao クラスを作成しようとしています。
ただし、一般的な型付きキーを使用すると問題が発生しました。ジェネリック BaseDao クラスで「===」演算子を使用しようとすると、コンパイル エラーが発生します。コンパイル エラー:値 === は型パラメーター TKey のメンバーではありません
面倒なメソッドを持つ私の dao クラスは次のように定義されています。
import org.squeryl.PrimitiveTypeMode._
import org.squeryl._
abstract class BaseDao[TKey, T <: BaseEntity[TKey]](val table: Table[T]) {
def delete(entity: T) : Boolean = {
table.deleteWhere(record => record.id === entity.id) //This is where I get the compile error
}
}
BaseEntity は次のように定義されます。
abstract class BaseEntity[TKey] extends KeyedEntity[TKey]
私も Dao クラスに PrimitiveTypeMode をインポートします...私の最初のことは、TKey を === 演算子が制約されているものに制約する必要があることでしたが、ソースを見ると、明示的な制約がないようですオペレーターなので、少し迷っています。
演算子は、ここの squeryl のソースで定義されています: https://github.com/max-l/Squeryl/blob/master/src/main/scala/org/squeryl/dsl/TypedExpression.scala