Как сравнить столбец[option[DateTime] с DateTime.now в фильтре slick 3.0

у меня следующая проблема..

я использую spray.http.DateTime, и мой картограф:

  implicit val JavaUtilDateTimeMapper =
    MappedColumnType.base[DateTime, Timestamp] (
      d => new Timestamp(d.clicks),
      d => spray.http.DateTime(d.getTime))


 case class EventosModelTable(
  id: Option[Long],
  idCliente: Option[Long],
  idPlan: Option[Long] = None,
  idServicio: Option[Long] = None,
  tipo: TipoEventos.Value,
  fechaInicio: DateTime,
  fechaFin: Option[DateTime]
) extends BaseModel

class EventosTabla(tag: Tag) extends Table[EventosModelTable](tag, "eventos") with BaseTabla{

  override def id = column[Long]("id", O.PrimaryKey, O.AutoInc)
  def idCliente = column[Long]("id_cliente")
  def idPlan = column[Option[Long]]("id_plan")
  def idServicio = column[Option[Long]]("id_servicio")
  def tipo = column[TipoEventos.Value]("tipo_evento")
  def fechaInicio = column[DateTime]("fecha_inicio")
  def fechaFin = column[Option[DateTime]]("fecha_fin")

  def * = (id.?,idCliente.?,idPlan,idServicio,tipo,fechaInicio,fechaFin) <> (EventosModelTable.tupled, EventosModelTable.unapply _)

  def cliente = foreignKey("cliente",idCliente,TableQuery[ClientesTabla])(_.id)
  def plan = foreignKey("plan",idPlan,TableQuery[PlanesTabla])(_.id)
}

тогда .. мне нужно найти событие, где fechaFin равно Null или fechaFin> DateTime.now ... но проблема в том, что fechaFin может быть Null, тогда это значение Option, и я не могу сравнить с DateTime.now .. ошибка компиляции что Some[DateTime] не имеет > метода.

буду признателен за любую помощь

запрос такой..

def getAltasBajas(id : Long) : DBIOAction[Seq[EventosModelTable],NoStream,Effect.All] = {

      val q = for {
        altasBajas <- tabla.filter(_.idCliente === id)
            if altasBajas.fechaFin.isEmpty || (altasBajas.fechaFin.isDefined && (altasBajas.fechaFin)<(DateTime.now))
      }yield altasBajas

      q.result
    }

person Juan Pablo Vittori    schedule 23.07.2015    source источник


Ответы (1)


Я нашел этот ответ, который указывал бы, что ваша реализация должна работать (по крайней мере, как насколько я вижу) или вы могли бы попробовать

val q = for {
  altasBajas <- tabla.filter(_.idCliente === id)
  if !altasBajas.fechaFin.isNull || altasBajas.fechaFin < DateTime.now
} yield altasBajas
person Sascha Kolberg    schedule 23.07.2015
comment
Привет, Саша, это не работает... forall не является методом-членом altasBajas.fechaFin - person Juan Pablo Vittori; 23.07.2015
comment
Да, это та часть, где я сказал, что я не эксперт по Slick ;). Однако, согласно ссылке, ваша реализация или if !altasBajas.fechaFin.isNull || altasBajas.fechaFin < DateTime.now должны работать - person Sascha Kolberg; 23.07.2015
comment
проблема была в маппере. Теперь переключитесь на этот github.com/tototoshi/slick-joda-mapper и это работает! Большое спасибо! - person Juan Pablo Vittori; 23.07.2015