【问题标题】:How would you implement a self relation for the MegaProtoUser?您将如何为 MegaProtoUser 实现自我关系?
【发布时间】:2011-10-24 10:25:27
【问题描述】:

我正在尝试使用 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]                                                     ^

如何解决这个问题?

问候

【问题讨论】:

  • 用户伴随对象是什么样的?
  • 刚刚从示例中复制

标签: scala orm lift


【解决方案1】:

如果您查看错误消息,您会发现 OneToMany 助手需要在关系的“多”端有一个 foreign 键,以指向这个“一个”。 User.id 是主键,因此不适合。

如果你仔细想想,你真正想要的是多对多关系。

你可以这样创建:

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

【讨论】:

    猜你喜欢
    • 2012-06-22
    • 2019-09-15
    • 2013-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 2010-12-21
    • 1970-01-01
    相关资源
    最近更新 更多