我正在使用 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/