2012-04-22 7 views
3

Я использую отличный ScalaQuery, и я пытаюсь создать общий репозиторий для общих операций, но я не соглашусь с ним. Надеюсь, кто-то может помочь.Общий репозиторий с использованием 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) 

и таблицы для буксировки продукта и порядка. Теперь я хочу, общий репозиторий:

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 
} 

Я не могу реализовать в querys, используя для понимания, так как кортеж, описывающий таблицу не известен во время компиляции в признака (или абстрактный класс) RecordRepository.

Заранее благодарен!

+0

на основе прилагаемого фрагмента кода, вы еще не сопоставляются продукта и модели Order классы соответствующих таблиц БД – virtualeyes

+0

Да, я хотел сэкономить место, вот простая схема: 'object ProductTable extends ExtendedTable [(Long, String, Int)] (« продукт ») { def id = column [Long] (« id », O. PrimaryKey, O.AutoInc) def name = column [String] ("name", O. NotNull) цена DEF = столбец [Int] ("цена", O.NotNull) Защита * = идентификатор ~ имя ~ цена } объекта OrderTable расширяет ExtendedTable [(Long, String, Int)] ("порядок") { def id = column [Long] ("id", O.PrimaryKey, O.AutoInc) def name = column [String] ("name", O.NotNull) def amount = column [Int] ("цена ", O.NotNull) def * = id ~ name ~ amount } ' – singy

ответ

1

@singy ok, good, подумал, что вы оставили это (отображение) вне (вы должны отредактировать свой ответ, положив сопоставление в комментарий, кстати).

Попробуйте следующее:
1) изменение class Product к case class Product
2) заменить ExtendedTable[(Long, String, Int)] с, ExtendedTable[Product]

+0

Большое спасибо, это был правильный намек !!! – singy

+0

@singy, думал, что кортеж был виновником ;-) – virtualeyes

Смежные вопросы