2013-04-14 10 views
5

優れたsqueryl ORMフレームワークを使用して簡単なBaseDaoクラスを作成しようとしています。値===は、パラメータTKey(Squerylを使用)のメンバーではありません

しかし、一般的な型付きキーを使用すると問題が発生しました。ジェネリックBaseDaoクラスで '==='演算子を試してみると、コンパイルエラーが出ます。コンパイルエラーがある:値===タイプパラメータ処理鍵のメンバーではない

その面倒な方法と私のDAOクラスは次のように定義される。

abstract class BaseEntity[TKey] extends KeyedEntity[TKey] 
:として定義される

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

私のDaoクラスにもPrimitiveTypeModeをインポートしました... 私の最初のTKeyは、===演算子が制約されていたものに制約される必要がありましたが、ソースを見ると、オペレータの周りに明示的な制約があるので、私は少し失われています。

オペレータは、ここでsquerylのソースで定義されています:https://github.com/max-l/Squeryl/blob/master/src/main/scala/org/squeryl/dsl/TypedExpression.scala

+0

スコープ内に、定義されているものがありますか?たとえば、scalazは型保証===を持っています。 –

+0

こんにちは@TaylorLeese、私は質問に私のBaseDaoクラスで持っている2つのインポートを追加しました。これらの2つのインポートで、Daoクラスの具体的な実装は正常に動作します(つまり、===演算子はIntプロパティとInt引数で使用できます) – Robert

+0

答えはhttps://groups.google .com/forum /?fromgroups =#!topic/squeryl/CiBatiSnIug – jcern

答えて

0

私は、これはSquerylで行うことができるとは思いません。 Squerylは、一般的に型付けされたキーをサポートしません。Javaリフレクションを使用して型を取得します。型は実行時に消去されるため、Object型であると考えられます。

関連する問題