Сглаженная проблема проекции схемы с датой - PullRequest
0 голосов
/ 31 мая 2018

Я пытаюсь создать схему для простой таблицы в Slick 3.2.Я довольно новичок в скале, так что это может быть глупым вопросом.Когда я пытаюсь удалить прогнозирование даты, кажется, работает нормально, и я в состоянии выполнить запрос выбора нормально, но когда я добавляю дату, я не могу даже скомпилировать код.

Ниже приведен код моей схемы:

import slick.jdbc.OracleProfile.api._
import java.sql.Date

class User(tag: Tag)
  extends slick.jdbc.OracleProfile.api.Table[(Long , String , Date)](tag, "USR") {

  def usr_arch_dt : Rep[Date]= column[Date]("USR_ARCH_DT")
  def usr_id : Rep[Long] = column[Long]("USR_ID", O.PrimaryKey)
  def usr_subj_txt : Rep[String]= column[String]("USR_SUBJ_TXT")

  def * : (Long, String,  Date) =
    (usr_id , usr_subj_txt , usr_arch_dt) // I see mentioned error here

}

Исключение или ошибка, которую я вижу в Intellij:

Выражение типа Rep [Long] не соответствует ожидаемомувведите Long.

Если я смогу скомпилировать этот код, я ищу поиск по диапазону дат, например,

val filterQuery: Query[User, (Long, String , Date), Seq] =
        ntfns.filter(_.usr_arch_dt > Calendar.getInstance().getTime )

Спасибо!

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Спасибо @Leo, лишняя строка была опечаткой, теперь я убрал ее из вопроса для пользы других.Ниже код работал для меня:

case class User(tag: Tag)
  extends slick.jdbc.OracleProfile.api.Table[(Long , String , Date)](tag, "USR") {

  def usr_arch_dt : Rep[Date]= column[Date]("USR_ARCH_DT")
  def usr_id : Rep[Long] = column[Long]("USR_ID", O.PrimaryKey)
  def usr_subj_txt : Rep[String]= column[String]("USR_SUBJ_TXT")

  def * = (usr_id  , usr_subj_txt , usr_arch_dt)
}

Мне все еще нужно взглянуть на фильтр, я попробую ваш метод и сообщу вам результат.

0 голосов
/ 31 мая 2018

Похоже, что у вашего def * : (Long, String, String, Date) есть дополнительные String.

При поиске по дате ваш фильтр не будет работать, так как java.sql.Date поставляется с ограниченными методами.Обычной практикой в ​​Slick является создание неявного сопоставителя между java.sql.Date и более многофункциональным Joda Time :

import scala.slick.driver.JdbcProfile.MappedColumnType
import java.sql.Date
import org.joda.time.DateTime
// ...

implicit def dateTimeMapper = MappedColumnType.base[DateTime, Date] (
  dt => new Date(dt.getMillis),
  d => new DateTime(d)
)

Вот связанная SO ссылка .

...