提升映射器或记录框架中的继承

标签 inheritance scala polymorphism lift

有没有办法使用 Mapper o Record Framework 在 Lift 中定义正确的继承模型,其中父类有一个表,每个儿子有一个表?

最佳答案

假设您希望使用继承能够在每个子类中使用相同的映射字段,我已经通过对这些字段使用特征来解决这个问题:

trait SuperFields[T <: Mapper[T]] {
  self: T =>
  object DESCRIPTION extends MappedString[T](this, 255)
  object BRAND extends MappedString[T](this, 50)
  // etc
}

然后每个 Mapper/MetaMapper 将扩展 SuperFields,但定义自己的数据库表和连接标识符:
class Product extends Mapper[Product] with SuperFields[Product] {
  override def getSingleton = Product
}

object Product extends Product with MetaMapper[Product] {
  override def dbTableName = "PRODUCT"
  override def dbDefaultConnectionIdentifier = SomeConnection
}

和:
class Service extends Mapper[Service] with SuperFields[Service] {
  override def getSingleton = Service
}

object Service extends Service with MetaMapper[Service] {
  override def dbTableName = "SERVICE"
  override def dbDefaultConnectionIdentifier = SomeOtherConnection
}

关于提升映射器或记录框架中的继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3622391/

相关文章:

python - 关于继承的嵌套类成员的 Pylint 警告

java - 覆盖指定类中的方法

java - 无法理解一组 Java 对象的输出

scala - 使用 Scalaz 比较两个 UUID ===

java - 从 Java List 转换为 Scala 可变缓冲区

scala - Scala中有什么方法可以将类代码拆分成多个文件吗?

c++ - 多态覆盖

c# - 派生类对象如何添加到基类对象列表

clojure - 如何在 clojure 中编写可变参数 defmulti/defmethod

java - java中继承的问题