JDO / DataNucleus:映射/计算派生字段

时间:2015-05-04 12:39:14

标签: jdo datanucleus

简而言之:如何使用JDO / DataNucleus映射/计算派生字段?

实施例

Order可以有一个或多个Items。字段totalItemAmount是所有Items及其amounts的总和。 totalItemAmount不应作为数据存储区中的字段存在,而应计算。

class diagram of Order and Item

使用Hibernate可以使用@Formula注释totalItemAmount - 请参阅https://stackoverflow.com/a/2986354/2294031

是否存在JDO / DataNucleus的等价物?

的变通方法

因为我还没有找到任何东西,所以我考虑使用替代方法。但我不确定哪一个是合适的。

  1. 实施totalItemAmount作为方法:可以使用方法(例如Order.getTotalItemAmount())计算项目总数。该方法迭代Items的所有Order,并总结每个amount的{​​{1}}。但我想如果我想显示许多订单的概述,这种方法会非常慢。因为每次Item被调用,getTotalItemAmount()的所有Items都将被(不必要地)提取。
  2. 定义自定义查询:当DataNucleus从数据存储区获取Order时,是否可以定义将使用的自定义查询?
  3. Orders视为“正常”列(如totalItemAmount):number将是一个整数列,每次totalItemAmount列表都来自Items }更新后,Order也会更新。但我不喜欢这种方法,因为它可能导致不一致 - 如果在上下文之外修改了订单(例如使用普通SQL),totalItemAmount的内容可能是错误的。
  4. 使用SQL视图:我可以按照Hibernate Derived Properties - Performance and Portability中的描述定义视图。但这会带来大量的工作和未来的维护 - 这对于收益来说太过分了。
  5. 有没有其他方法可以解决这个问题?

    Off-Topic:随意评论我的写作,因为我真的想改进它。

0 个答案:

没有答案