Наследование в Lift Mapper или Record Framework - PullRequest
5 голосов
/ 02 сентября 2010

Есть ли способ определить правильную модель наследования в Lift, используя Mapper o Record Framework, где есть таблица для родительского класса и одна таблица для каждого сына?

1 Ответ

8 голосов
/ 06 ноября 2010

Предполагая, что вы хотите использовать наследование, чтобы иметь возможность использовать одинаковые сопоставленные поля в каждом из подклассов, я подошел к этому, используя черту для этих полей:

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
}
...