Предполагая, что вы хотите использовать наследование, чтобы иметь возможность использовать одинаковые сопоставленные поля в каждом из подклассов, я подошел к этому, используя черту для этих полей:
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
}