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



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

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

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

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

最新更新