scala - 如何正确比较 Slick 中的 Options 成员?

标签 scala database-design database-schema optional slick-2.0

我正在处理地址和成员 子前提 (apartment/condo #) 导致检索丢失。我也担心 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))

成功过滤:(通过删除子前提)
tableQuery.filter(c=> (c.longitude === r.longitude && c.latitude === r.latitude) ||
            (c.streetNumber === r.streetNumber && c.route === r.route && c.neighborhoodId === r.neighborhoodId)) 

我已经在 s.t. 下面包含了定义。如果我错过了另一个促成因素,希望它会被注意到。
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,route,subpremise,neighborhoodId,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)
)

关于scala - 如何正确比较 Slick 中的 Options 成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24390868/

相关文章:

scala - 如何在 Scala 中为简单类编写 copy() 方法

database - 维基百科如何避免重复条目?

mysql - 基数和外键关系

security - 处理用户帐户身份验证和密码的最佳方式

database - 一对多关系的数据透视表与 Parent_ID

java - 在 hibernate 中进行逆向工程时不生成对外关系

MySQL 错误 1064 - MySQL Workbench

java - 是否有用于使用 Scala 或 Java 编辑 MP4 元数据的库?

Scala 将 Map[Int, Future[Seq[T]]] 转换为 Future[Map[Int, Seq[T]]]

scala - 在 Spark Scala 中编码时出现 ArrayIndexOutOfBoundsException