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

Initialize transient fields after object is created from database?

我正在使用 Morphia 和 MongoDB。获取数据时,使用不带参数的默认构造函数创建对象,然后使用反射初始化字段(像 Kryo 和 Jackson 这样的序列化库也这样做)。这样就不可能根据构造函数中字段的值添加代码(因为它们还没有用数据库中的数据初始化)。我想知道是否有一种方法可以在获取和创建对象之后 运行 附加代码,而无需实际手动调用方法?原因是我正在存储一个对象的部分数据,并基于它自己的数据和许多引用来初始化额外的瞬态字段。我目前可以想出 4 个备选方案:

  1. 运行 当对象是 获取但每当有人(包括我)忘记 运行 方法问题开始出现。
  2. 将那些当前瞬态字段添加到数据库但是 它们在 运行 时间内变化很大,因此需要更新 频繁地。因为每个对象有几十个我不认为 这是个好方法。
  3. 删除临时字段并添加方法 return 值。这会为我的服务器增加一些额外的工作,但是 听起来是目前最好的选择。
  4. 将所有瞬态字段默认为空,每当我需要获取或设置其中之一时,只要它为空,我就会计算并填充它们。

我目前正在使用 1。但正在争论我是否应该使用 3 或 4。但是,如果有更好的方法来 运行 创建对象后的一些代码,我想知道。

您可以使用 @PostLoad 到 运行 您的 initialize(),当 Morphia 将数据加载到新实例 f

时,它会自动为您调用该方法