Как бы вы реализовали самоотношение для MegaProtoUser? - PullRequest
3 голосов
/ 24 октября 2011

Я пытаюсь реализовать отношение для пользовательского класса, моделирующего концепцию "друзей" с помощью платформы Lift Mapper. Моя попытка выглядит примерно так

object User extends User with MetaMegaProtoUser[User] {
    override def dbTableName = "users" // define the DB table name
    override def screenWrap = Full(<lift:surround with="default" at="content">
               <lift:bind /></lift:surround>)
    // define the order fields will appear in forms and output
    override def fieldOrder = List(id, firstName, lastName, email,
                          locale, timezone, password)

    // comment this line out to require email validations
    override def skipEmailValidation = true
 }

class User extends MegaProtoUser[User] with OneToMany[Long,User]
{
   def getSingleton = User // what's the "meta" server
   object friends extends MappedOneToMany(User, User.id)
}

но он не компилируется из-за несоответствия типов

[error]  src/main/scala/code/model/User.scala:30: type mismatch;
[error]  found   : net.liftweb.mapper.MappedLongIndex[code.model.User]
[error]  required: net.liftweb.mapper.MappedForeignKey[Long,?,code.model.User]
[error]   object friends extends MappedOneToMany(User, User.id)
[error]                                                     ^

Каков был бы путь по этому поводу?

Привет

1 Ответ

0 голосов
/ 29 февраля 2012

Если вы посмотрите на сообщение об ошибке, вы увидите, что помощнику OneToMany требуется ключ foreign в конце "many" отношения, указывающий на этот "one". User.id является первичным ключом и поэтому не подходит.

Если вы думаете об этом, то на самом деле вы хотите установить отношения с ManyToMany.

Что вы можете создать так:

object User extends User with MetaMegaProtoUser[User] with MappedManyToMany {

...

object friends extends MappedManyToMany(Friends, Friends.friend, Friends.friendee, User)

где у вас есть таблица соединений:

class Friends extends Mapper[Friends] {
  object friend extends MappedLongForeignKey(this, User) {
    override def dbIndexed_? = true
  }
  object friendee extends MappedLongForeignKey(this, User) {
    override def dbIndexed_? = true
  }
  def getSingleton = Friends
}
object Friends extends Friends with MetaMapper[Friends]

Если вы хотите, чтобы отношения с друзьями были рефлексивными, вам придется проделать дополнительную работу.

Это очень запоздалый ответ. Я бы посоветовал публиковать их в списке рассылки для очень быстрых ответов: https://groups.google.com/forum/?fromgroups#!forum/liftweb

...