SORM:尝试引用未经存在的实体

时间:2013-11-29 12:03:47

标签: mysql scala playframework-2.2 sorm

我使用 playframework 2.2.1 scala 2.10 SORM 0.3.10 for mysql db。 当我试图保存简单案例类的实例时:

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对象中注册为实体。

1 个答案:

答案 0 :(得分:4)

UserAuthToken是一个实体,意味着它映射到DB中的某一行。为了使您和SORM能够识别该行(和实体),Db.save(..)方法返回类型UserAuthToken with Persisted的值,即带有标识信息的原始值的副本。

User也是一个实体,但它引用UserAuthToken,这意味着它映射到的行必须在UserAuthToken上存储标识信息。因此,为了能够保留User类型的值,它必须仅引用已持久的UserAuthToken。即:

..
val persistedUserAuthToken = Db.save(userAuthToken)
val persistedUser = Db.save( User(.., atoken = persistedUserAuthToken) )