2011-10-24 9 views
3

私はLift Mapperフレームワークで "friends"コンセプトをモデリングするユーザークラスの関係を実装しようとしています。私の試みは、このMegaProtoUserの自己関係をどのように実装しますか?

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]             ^

型の不一致によりコンパイルに失敗しますか?

よろしく

+0

ユーザーコンパニオンオブジェクトを何に見えますか? – thoredge

+0

例からコピーしただけです – tonicebrian

答えて

0

エラーメッセージを見れば、あなたはOneToManyヘルパーが戻って、この「1」を指す関係の「多くの」最後に外国キーを必要としていることを参照してください。 User.idは主キーであるため、適合しません。

あなたが考えているのは、本当にManyToMany関係です。あなたが友人関係になりたい場合は

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] 

:あなたが参加するテーブルを持っている

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

...

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

:あなたはこのように作成することができます

反射的な、あなたはいくつかのさらなる仕事をする必要があります。

これは私が推測する非常に遅く答えです。私は非常に高速な応答をリフトメーリングリストに投稿することをお勧め:https://groups.google.com/forum/?fromgroups#!forum/liftweb

関連する問題