2013-04-14 11 views
5

Próbuję napisać prostą klasę BaseDao przy użyciu doskonałej struktury ORM squeryl.wartość === nie jest członkiem parametru typu TKey (przy użyciu Squeryl)

Jednak napotkałem problem podczas używania generycznych klawiszy wpisanych na klawiaturze. Wystąpił błąd kompilacji podczas próby użycia operatora "===" w mojej ogólnej klasie BaseDao. Błąd kompilacji jest: wartość === nie jest członkiem typu parametru TKey

Moja klasa dao z kłopotliwym sposobem jest zdefiniowany jako:

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 jest zdefiniowany jako:

abstract class BaseEntity[TKey] extends KeyedEntity[TKey] 

Importuję również PrimitiveTypeMode w mojej klasie Dao ... Moim pierwszym warunkiem było jednak to, że TKey musiał być ograniczony do tego, do jakiego operatora był ograniczony, ale patrząc na źródło, nie wydaje się, aby być wyraźnym ograniczeniem wokół operatora, więc jestem trochę zagubiony.

Operator jest zdefiniowana w źródle squeryl tutaj: https://github.com/max-l/Squeryl/blob/master/src/main/scala/org/squeryl/dsl/TypedExpression.scala

+0

Czy masz coś innego w zakresie, który ma zdefiniowany ===? Na przykład skalaz ma wartość "safe" równą ===. –

+0

Witam @TaylorLeese, Właśnie dodałem dwa importy, które mam w klasie BaseDao do pytania. Przy tych dwóch importach moje konkretne implementacje klas Dao działają dobrze (tzn. Operator === może być używany z właściwością Int i argumentem Int) – Robert

+0

Odpowiedź można znaleźć tutaj: https://groups.google .com/forum /? fromgroups = #! topic/squeryl/CiBatiSnIug – jcern

Odpowiedz

0

Nie sądzę, można to zrobić w Squeryl. Squeryl nie obsługuje kluczy generowanych na maszynie - używa odbicia w Javie, aby uzyskać jego typ, który jest wymazywany w czasie wykonywania, a zatem myśli, że są typu Object.

Powiązane problemy