假设我有一个特征代表一组几个有效状态。将对象存储在数据库中是一个好习惯吗?存储 Int 并使用隐式函数 MappedColumnType.base[Int, DoorState] 将它们映射到 DoorState 会更好吗?

trait DoorState
case object Open extends DoorState
case object Closed extends DoorState

class Doors(tag: Tag) extends Table[Door](tag, "DOORS") {
  ...
  def state = column[DoorState]("DOOR_STATE")
  ...
}

最佳答案

厂商推荐使用:

implicit def doorStateMapper = MappedColumnType.base[DoorState, Int]( ... )

在您的案例对象和整数之间进行映射(我假设这是您的数据库列的类型)。需要在表和查询的范围内。您还可以映射到字符串或其他任何内容。 MySQL ENUM 就像映射到字符串一样。见 http://slick.typesafe.com/doc/2.1.0/userdefined.html#using-custom-scalar-types-in-queries

然后,这使您可以将 DoorState 用作 Column 类型,如
column[DoorState]Column[DoorState]

关于database - Slick 中的 Scala 枚举(案例对象),良好实践,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28331528/

10-12 06:30