我正在尝试使用优秀的squeryl ORM框架编写一个简单的BaseDao类。
但是,当使用通用类型键时,我遇到了一个问题。当我尝试在我的通用BaseDao类中使用'==='运算符时,我收到编译错误。编译错误是: value ===不是类型参数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
答案 0 :(得分:0)
我不认为这可以在Squeryl中完成。 Squeryl不支持通用类型的键 - 它使用Java反射来获取它们的类型,它在运行时被删除,因此认为它们是Object类型。