您将如何为 MegaProtoUser 实现自我关系?
Posted
技术标签:
【中文标题】您将如何为 MegaProtoUser 实现自我关系?【英文标题】:How would you implement a self relation for the 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] ^
如何解决这个问题?
问候
【问题讨论】:
用户伴随对象是什么样的? 刚刚从示例中复制 【参考方案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
【讨论】:
以上是关于您将如何为 MegaProtoUser 实现自我关系?的主要内容,如果未能解决你的问题,请参考以下文章
您将如何为 Twitter 等社交网站设计 AppEngine 数据存储?
您将如何处理 PHP + MySQL 字谜求解器? [关闭]