简而言之:如何使用JDO / DataNucleus映射/计算派生字段?
Order
可以有一个或多个Items
。字段totalItemAmount
是所有Items
及其amounts
的总和。 totalItemAmount
不应作为数据存储区中的字段存在,而应计算。
使用Hibernate可以使用@Formula
注释totalItemAmount
- 请参阅https://stackoverflow.com/a/2986354/2294031。
是否存在JDO / DataNucleus的等价物?
因为我还没有找到任何东西,所以我考虑使用替代方法。但我不确定哪一个是合适的。
totalItemAmount
作为方法:可以使用方法(例如Order.getTotalItemAmount()
)计算项目总数。该方法迭代Items
的所有Order
,并总结每个amount
的{{1}}。但我想如果我想显示许多订单的概述,这种方法会非常慢。因为每次Item
被调用,getTotalItemAmount()
的所有Items
都将被(不必要地)提取。Order
时,是否可以定义将使用的自定义查询?Orders
视为“正常”列(如totalItemAmount
):number
将是一个整数列,每次totalItemAmount
列表都来自Items
}更新后,Order
也会更新。但我不喜欢这种方法,因为它可能导致不一致 - 如果在上下文之外修改了订单(例如使用普通SQL),totalItemAmount
的内容可能是错误的。有没有其他方法可以解决这个问题?
Off-Topic:随意评论我的写作,因为我真的想改进它。