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