Еще одна черты вопроса :-(Как заменить признак IdPK на пользовательский признак, который использует основной ключ String вместо Long Primary Key?
Я смешение в черте IdPK в мою модель Lift Mapper следующим образом:
class Test1 extends LongKeyedMapper[Test1] with IdPK {
Я хотел бы перейти на использование строковых индексов вместо длинных индексов (I не хочу, но я должен, сейчас) Я пытаюсь написать черту StringIdPK
заменить IdPK
черту Вот моя попытка:..
trait StringIdPK /* extends BaseLongKeyedMapper */ {
self: KeyedMapper[String] =>
def primaryKeyField = id
object id extends MappedStringIndex(this, 50)
}
(я на основе этого на IdPK
черта, которая заключается в следующем:
trait IdPK /* extends BaseLongKeyedMapper */ {
self: BaseLongKeyedMapper =>
def primaryKeyField = id
object id extends MappedLongIndex[MapperType](this.asInstanceOf[MapperType])
}
код этого признака можно найти here)
Когда я пытаюсь скомпилировать, я получаю следующее сообщение об ошибке:
wrong number of type arguments for net.liftweb.mapper.KeyedMapper, should be 2
Спецификация KeyedMapper
(который может быть найден here) является:
trait KeyedMapper[KeyType, OwnerType <: KeyedMapper[KeyType, OwnerType]] extends Mapper[OwnerType] with BaseKeyedMapper
Мне нужно лучше понять, что означает OwnerType <: KeyedMapper[KeyType, OwnerType]
и как разместить его в моем обычном черте выше. Поэтому мой вопрос: что я делаю неправильно в моем определении признака StringIdPK
выше? (Это поможет мне понять, как бороться с OwnerType <: KeyedMapper[KeyType, OwnerType]
).
Спасибо!
ОБНОВЛЕНИЕ: Я думаю, что следующее решение близко к нему (см. Ниже - я взял код из here). Это все еще не совсем верно, поскольку компилятор все еще жалуется на объекты FK, которые я расширил, не имея чужой мета-определенной.
trait BaseStringKeyedMapper extends BaseKeyedMapper{
override type TheKeyType = String
}
trait StringKeyedMapper[OwnerType <: StringKeyedMapper[OwnerType]] extends KeyedMapper[String, OwnerType] with BaseStringKeyedMapper {
self: OwnerType =>
}
trait StringKeyedMetaMapper[A <: StringKeyedMapper[A]] extends KeyedMetaMapper[String, A] {
self: A =>
}
trait StringIdPK {
self: BaseStringKeyedMapper =>
def primaryKeyField = id
object id extends MappedStringIndex[MapperType](this.asInstanceOf[MapperType], 50)
}
Кроме того, была проводка по этому вопросу on the lift google group here, но это, кажется, не решен.
В чем проблема? Я только что скомпилировал и использовал этот код для создания модели Mapper с помощью StringKeyedMapper. – alcarv
@ Андре Луис, спасибо за ваш комментарий. Я снова проверил, и теперь он работает. Я думаю, что проблема, с которой я раньше сталкивалась, заключалась в добавлении поля владельца и сопоставлении этого как внешнего ключа пользователя, и я все еще не могу получить строку PK. Благодарю. –