Ich versuche, ein Merkmal zu ändern, das ich für Scala Slick Datenbankabfragen verwendet wird. Hier zwei Methoden, die ich bisher:Subtype für ein Tabellenelement in einer Scala Slick Query
protected def findByPrimaryKey(id: PrimaryKeyType): Query[Table[_], T, Seq]
/**
* return the row that corresponds with this record
* @param t - the row to find
* @return query - the sql query to find this record
*/
protected def find(t: T): Query[Table[_], T, Seq]
Ich möchte diese beiden Methoden Signaturen modifizieren für Subtypen von T
zu ermöglichen. Eine Instanz davon ist, wenn ich eine Merkmalsdefinition für einen Datensatz habe, aber eine konkrete Implementierung dieses Merkmals benötige, um sie tatsächlich für Glatt zu verwenden. Ich habe so etwas wie dies versucht zu tun:
/**
* return all rows that have a certain primary key
* @param id
* @return Query object corresponding to the selected rows
*/
protected def findByPrimaryKey(id: PrimaryKeyType): Query[Table[_], _ <: T, Seq]
/**
* return the row that corresponds with this record
* @param t - the row to find
* @return query - the sql query to find this record
*/
protected def find(t: T): Query[Table[_], _ <: T, Seq]
jedoch erhalte ich einen Übersetzungsfehler wie folgt:
[error] found : slick.driver.PostgresDriver.simple.Query[slick.driver.PostgresDriver.simple.Table[_],_$8,Seq] where type _$8 <: T
[error] (which expands to) scala.slick.lifted.Query[slick.driver.PostgresDriver.Table[_],_$8,Seq]
[error] required: slick.driver.PostgresDriver.simple.Query[slick.driver.PostgresDriver.simple.Table[_],T,Seq]
[error] (which expands to) scala.slick.lifted.Query[slick.driver.PostgresDriver.Table[_],T,Seq]
[error] Note: _$8 <: T, but class Query is invariant in type U.
[error] You may wish to investigate a wildcard type such as `_ <: T`. (SLS 3.2.10)
[error] val query: Query[Table[_], T, Seq] = find(t)
[error] ^
[error] /home/chris/dev/suredbits-core/src/main/scala/com/suredbits/core/db/CRUDActor.scala:58: type mismatch;
[error] found : slick.driver.PostgresDriver.simple.Query[slick.driver.PostgresDriver.simple.Table[_],_$8,Seq] where type _$8 <: T
[error] (which expands to) scala.slick.lifted.Query[slick.driver.PostgresDriver.Table[_],_$8,Seq]
[error] required: slick.driver.PostgresDriver.simple.Query[slick.driver.PostgresDriver.simple.Table[_],T,Seq]
[error] (which expands to) scala.slick.lifted.Query[slick.driver.PostgresDriver.Table[_],T,Seq]
[error] Note: _$8 <: T, but class Query is invariant in type U.
[error] You may wish to investigate a wildcard type such as `_ <: T`. (SLS 3.2.10)
[error] val query: Query[Table[_], T, Seq] = find(t)
[error] ^
und ich bin nicht sicher, was das Ergebnis zu tun, um zu bekommen, was ich will.