4

私は、 scala 2.10playframework 2.2.1を使用しており、mysql db には SORM 0.3.10 を使用しています。単純なケース クラスのインスタンスを保存しようとしているとき:

case class User(email: String, password: String, token: String, verified: Boolean = false, atoken: UserAuthToken) {
    def save = Db.save[User](this)
}

私はこのエラーを取得しています:

sorm.core.SormException: Attempt to refer to an unpersisted entity: UserAuthToken(7779235c1fd045f39ced7674a45baaa2,1387039847)

私が間違っていることは何ですか?UserAuthTokenも非常に簡単です:

case class UserAuthToken(token: String = UUID.randomUUID().toString.replace("-",""), expire: Int = (Calendar.getInstance().getTimeInMillis/1000).toInt + 60*60*365)

どちらのクラスも Db オブジェクトにエンティティとして登録されています。

4

1 に答える 1

4

UserAuthTokenエンティティです。つまり、DB のある行にマップされます。ユーザーと SORM の両方がその行 (およびエンティティ) を識別できるようにするために、Db.save(..)メソッドは type の値UserAuthToken with Persisted、つまり識別情報を含む元の値のコピーを返します。

Userもエンティティですが、 を参照しますUserAuthToken。つまり、マッピング先の行は の識別情報を格納する必要がありUserAuthTokenます。したがって、 type の値を永続化できるようにするにはUser、すでに永続化されている のみを参照する必要がありますUserAuthToken。すなわち:

..
val persistedUserAuthToken = Db.save(userAuthToken)
val persistedUser = Db.save( User(.., atoken = persistedUserAuthToken) )
于 2013-11-29T14:03:38.473 に答える