【发布时间】:2014-07-25 17:22:52
【问题描述】:
我有一个案例类 Game,我可以使用 json4s 对它进行序列化/反序列化。
case class Game(name: String,publisher: String,website: String, gameType: GameType.Value)
在我的应用程序中,我使用 mapperdao 作为我的 ORM。因为Game 使用Surrogate Id 我没有id 有它的构造函数的一部分。
但是,当 mapperdao 从数据库返回一个实体时,它使用一个特征提供持久对象的 id。
Game with SurrogateIntId
特征的代码是
trait SurrogateIntId extends DeclaredIds[Int]
{
def id: Int
}
trait DeclaredIds[ID] extends Persisted
trait Persisted
{
@transient
private var mapperDaoVM: ValuesMap = null
@transient
private var mapperDaoDetails: PersistedDetails = null
private[mapperdao] def mapperDaoPersistedDetails = mapperDaoDetails
private[mapperdao] def mapperDaoValuesMap = mapperDaoVM
private[mapperdao] def mapperDaoInit(vm: ValuesMap, details: PersistedDetails) {
mapperDaoVM = vm
mapperDaoDetails = details
}
.....
}
当我尝试序列化Game with SurrogateIntId 时返回空括号,我认为这是因为 json4s 不知道如何处理附加的特征。
我需要一种方法来序列化 game,只将 id 添加到其属性中,并且几乎与我将这些用于所有 T with SurrogateIntId 的方法一样重要我的域对象。
谁能帮帮我?
【问题讨论】:
-
我相信这里的答案也应该适合你:stackoverflow.com/questions/22179915/…
-
@NickCecil 感谢您的回复!我认为你是对的,如果这只是一个特征问题,那么字段序列化就会起作用。我实际上需要更改标题并重新提出我的问题,因为这不是我遇到的实际问题(当时我自己并不理解)。我在下面的回答仍然是正确的解决方案,但我的问题实际上是处理我的 DO 被包裹在其中的一个抽象类。这是我使用 ORM 所付出的代价,它在引擎盖下隐藏了如此多的魔力 :)
标签: scala serialization case-class traits json4s