критерии фильтрации класса кейсов в Slick 3.0.3

У меня есть модель, соответствующая таблица и репозиторий. В моем репозитории с помощью TableQuery я хочу найти объект модели на основе некоторых критериев (функция от модели до логического значения), которую репозиторий не контролирует, он вводится как параметр. Например.

case class JournalEntryModel(id: Option[Long] = None, isDebit: Boolean, principal: Double)

class JournalEntryTable(tag: Tag) extends Table[JournalEntryModel](tag, "journal_entries") {

   def id = column[Long]("id", O.PrimaryKey, O.AutoInc)

   def isDebit = column[Boolean]("is_debit")  

   def principal = column[Double]("principal")

   def * = (id.?, isDebit, principal) <>
      (JournalEntryModel.tupled, JournalEntryModel.unapply)
}

object journalEntries extends TableQuery(new JournalEntryTable(_))

object Repository {

    def find(criteria: JournalEntryModel => Boolean): List[JournalEntryModel] = db.run {
         journalEntries.filter(je => criteria(je)).result            
    } toList
}

val credits = Repository.find(!_.isDebit && _.principal > 500.0)

Как написать такую ​​функцию фильтра?


person Adi    schedule 08.10.2015    source источник
comment
Вам нужно будет предоставить дополнительную информацию о том, почему решение, указанное в вашем вопросе, не работает. Он не компилируется или просто не возвращает правильные результаты?   -  person Gavin Schulz    schedule 11.10.2015


Ответы (1)


Я думаю, ваш вопрос: «Как написать литерал функции для JournalEntryModel => Boolean»?

Если вы хотите сделать это с литералом, как у вас, вам нужно определить свои параметры:

// Parameter list ("model" here) is required. You also need the argument type(s).
// Here, they're inferred from the argument to "find".
val credits = Repository.find(model => !model.isDebit && model.principal > 500.0)
person jkinkead    schedule 16.10.2015