从数据库创建对象后初始化瞬态字段?

时间:2018-08-13 07:20:17

标签: java database mongodb serialization morphia

我正在使用Morphia和MongoDB。提取数据时,将使用不带参数的默认构造函数创建对象,然后使用反射将字段初始化(Kryo和Jackson等序列化库也将执行此操作)。这样,就不可能根据构造函数内部字段的值添加代码(因为它们尚未使用数据库中的数据进行初始化)。我想知道在获取和创建对象之后是否有一种方法可以运行其他代码,而不需要在之后手动调用方法?原因是我正在存储对象的部分数据,并基于它自己的数据和许多引用来初始化其他临时字段。我目前可以提出4种选择:

  1. 当对象为时运行.initialize()之类的东西 拿来,但每当有人(包括我)忘记运行 方法问题开始发生。
  2. 将那些当前临时字段添加到数据库中,但是 它们在运行时变化很大,因此需要进行更新 经常。既然每个对象有几十个,我不认为 这是一个好方法。
  3. 删除瞬态字段并添加方法 返回值。这将为我的服务器增加一些额外的工作,但是 听起来是目前最好的选择。
  4. 将所有瞬态字段的默认值都设置为null,并且每当我需要获取或设置其中的一个时,我都会计算并在它们为null时填充它们。

我目前正在使用1.,但是我应该使用3还是4进行辩论。但是,如果有更好的方法可以在创建对象之后运行某些代码,我想知道。

1 个答案:

答案 0 :(得分:1)

您可以使用@PostLoad来运行initialize(),当将数据加载到新实例f中后,Morphia会自动为您调用该方法