SORM:尝试引用一个未持久化的实体
Posted
技术标签:
【中文标题】SORM:尝试引用一个未持久化的实体【英文标题】:SORM: Attempt to refer to an unpersisted entity 【发布时间】:2013-11-29 12:03:47 【问题描述】:我将 playframework 2.2.1 与 scala 2.10 和 SORM 0.3.10 一起用于 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】:UserAuthToken
是一个实体,这意味着它映射到数据库中的某个行。为了让您和 SORM 都能够识别该行(和实体),Db.save(..)
方法返回一个 UserAuthToken with Persisted
类型的值,即带有识别信息的原始值的副本。
User
也是一个实体,但它引用UserAuthToken
,这意味着它映射到的行必须存储UserAuthToken
上的标识信息。因此,为了能够持久化User
类型的值,它必须仅引用已持久化的UserAuthToken
。即:
..
val persistedUserAuthToken = Db.save(userAuthToken)
val persistedUser = Db.save( User(.., atoken = persistedUserAuthToken) )
【讨论】:
感谢您的帮助!我考虑过 dat,但没有将持久化令牌作为参数传递,似乎是一个错误:)以上是关于SORM:尝试引用一个未持久化的实体的主要内容,如果未能解决你的问题,请参考以下文章