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

scala – 如何在Slick中正确比较Options成员?

发布时间:2020-12-16 18:35:56 所属栏目:安全 来源:网络整理
导读:我正在使用地址做事,而成员子预设(公寓/公寓#)导致检索错过.我也担心subpremise是我唯一索引约束的一部分,因为它可以为null. 故障过滤器: tableQuery.filter(c= (c.longitude === r.longitude c.latitude === r.latitude) || (c.streetNumber === r.streetN
我正在使用地址做事,而成员子预设(公寓/公寓#)导致检索错过.我也担心subpremise是我唯一索引约束的一部分,因为它可以为null.

故障过滤器:

tableQuery.filter(c=> (c.longitude === r.longitude && c.latitude === r.latitude) ||
        (c.streetNumber === r.streetNumber && c.route === r.route && c.subpremise === r.subpremise && c.neighborhoodId === r.neighborhoodId))

成功过滤:(通过removung subpremise)

tableQuery.filter(c=> (c.longitude === r.longitude && c.latitude === r.latitude) ||
            (c.streetNumber === r.streetNumber && c.route === r.route && c.neighborhoodId === r.neighborhoodId))

我已经把这些定义包括在下面了.如果还有其他因素我错过了,希望它会被注意到.

case class Address(id:Option[Long],streetNumber:Short,route:String,subpremise:Option[String],neighborhoodId:Fk,latitude:Option[Double],longitude:Option[Double])

class Addresses(tag: Tag) extends Table[Address](tag,"addresses") with Logging {
  def id = column[Long]("id",O.PrimaryKey,O.AutoInc)
  def streetNumber = column[Short]("street_number")
  def route = column[String]("route",O.NotNull)
  def subpremise = column[Option[String]]("subpremise")
  def neighborhoodId = column[Long]("neighborhood",O.NotNull)
  def latitude = column[Option[Double]]("latitude")
  def longitude = column[Option[Double]]("longitude")

  //Constraints
  def idx = index("idx_streetnum_route_subpremise_neighborhood",(streetNumber,route,subpremise,neighborhoodId),unique = true)
  def gps = index("gps",(latitude,longitude),unique = true)

  //Foreign Key
  def neighborhood = foreignKey("NEIGHBORHOOD_FK",neighborhoodId,Neighborhoods.tableQuery)(_.id)

  def * = (id.?,streetNumber,latitude,longitude) <> (Address.tupled,Address.unapply)
}

解决方法

答案是使用以下检查.

( //Option Scenario both are defined
  (c.subpremise.isDefined && r.subpremise.isDefined && c.subpremise === r.subpremise) ||
  //Option Scenario both are empty
  (c.subpremise.isEmpty && r.subpremise.isEmpty)
)

(编辑:李大同)

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

    推荐文章
      热点阅读