加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – Slick并按选项列过滤

发布时间:2020-12-16 09:31:40 所属栏目:安全 来源:网络整理
导读:我试图使用Scala Slick 1.0.1过滤一个可选的日期列。 可能我只是看不到它,但我有一个看起来像这样的表: case class UserRole(id:UUID,userID:UUID,role:String)object UserRole extends Table[UserRole]("User_Role") { //(id: Long = 0l,name: String,act
我试图使用Scala Slick 1.0.1过滤一个可选的日期列。

可能我只是看不到它,但我有一个看起来像这样的表:

case class UserRole(id:UUID,userID:UUID,role:String)
object UserRole extends Table[UserRole]("User_Role")  {

  //(id: Long = 0l,name: String,active: Boolean) extends KeyedEntity[Long] {
  def id = column[UUID]("ID",O.PrimaryKey)
  def userID = column[UUID]("user_id")
  def vendorID = column[UUID]("vendor_id")
  def role = column[String]("role")
  def user = foreignKey("user_FK",userID,User)(_.id)

  def start = column[java.sql.Date]("startDate")
  def endDate = column[Option[java.sql.Date]]("endDate")

  def * = id ~ userID ~ role  <> (UserRole.apply _,UserRole.unapply _)
}

你会看到endDate是可选的。

如何构造一个查询,我过滤,因此endDate可以为NULL / None或大于当前(db)日期?我一般都在使用嵌入式api

谢谢

解决方法

这不漂亮(关于null.asInstanceOf的部分),但我认为它会工作。我从一个旧的Scala Query帖子中得到了这个想法,所以我不知道如果光滑的东西比以前更好一些,但是当我从查询中查看结果的selectStatement时,它看起来是正确的:

val now = new java.sql.Date(System.currentTimeMillis())
val query = for {
  role <- UserRole
  if (role.endDate === null.asInstanceOf[Option[java.sql.Date]] || role.endDate > now)
} yield role

编辑

感谢@MartinKolinek的评论,这段代码也可以工作,而且更干净,也许是更好的做法:

val now = new java.sql.Date(System.currentTimeMillis())
val query = for {
  role <- UserRole
  if (role.endDate.isNull || role.endDate > now)
} yield role

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读