我正在使用 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 对象中注册为实体。

最佳答案

UserAuthToken 是一个实体,意味着它被映射到数据库中的某行。为了让您和 SORM 都能识别该行(和实体), Db.save(..) 方法返回一个 UserAuthToken with Persisted 类型的值,即带有识别信息的原始值的副本。
User 也是一个实体,但它指的是 UserAuthToken ,这意味着它映射到的行必须在 UserAuthToken 上存储标识信息。因此,为了能够持久化 User 类型的值,它必须仅引用已经持久化的 UserAuthToken 。 IE。:

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

关于mysql - SORM:尝试引用非持久化实体,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20285380/

10-11 03:25