3

私は素晴らしいScalaQueryを使用しており、一般的な操作用の汎用リポジトリーを作成しようとしていますが、うまくいきません。うまくいけば、誰かが助けることができます。

私は例えば次の構造を持っています

abstract class Record(id : Int) 
class Product(id: Int,name:String,price : Int) extends Record(id)
class Order(id: Int,name:String,amount: Int)  extends Record(id)

製品と注文用の2つのテーブル。今、私は汎用リポジトリが必要です:

trait RecordRepository[T <: ExtendedTable[O]]{
     findById(id:Int) : Option[T]
     findAll() : List[T]
     save(entity:T)
     ...
}      

class ProductRepository extends RecordRepository[Product]
class ProductRepository extends RecordRepository[Order]

object ProductTable extends ExtendedTable[(Long, String, Int)]("product") {
  def id = column[Long]("id", O.PrimaryKey, O.AutoInc) 
  def name = column[String]("name", O.NotNull) 
  def price = column[Int]("price", O.NotNull) 
  def * = id ~ name ~ price 
} 
object OrderTable extends ExtendedTable[(Long, String, Int)]("order") {
  def id = column[Long]("id", O.PrimaryKey, O.AutoInc) 
  def name = column[String]("name", O.NotNull)
  def amount = column[Int]("price", O.NotNull) 
  def * = id ~ name ~ amount
}

テーブルを記述するタプルは、トレイト(または抽象クラス)RecordRepositoryでコンパイル時に認識されないため、forcomprehensionを使用してクエリを実装することはできません。

前もって感謝します!

4

1 に答える 1

1

@singyわかりました、いいですね、あなたはそれ(マッピング)を省略したと思いました(マッピングをコメントに入れるのではなく、答えを編集する必要があります、ところで)。

次のことを試してください:
1)に変更class Productします2)にcase class Product
置き換えますExtendedTable[(Long, String, Int)]ExtendedTable[Product]

于 2012-04-22T20:02:52.780 に答える