我正在尝试使用出色的 squeryl ORM 框架编写一个简单的 BaseDao 类。
但是,我在使用通用类型键时遇到了一个问题。当我尝试在我的通用 BaseDao 类中使用 '===' 运算符时出现编译错误。编译错误是:value === is not a member of type parameter 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