假设我有一个 Customer - CustomerOrder 一对多的双向关系, CustomerOrder 持有每个订单的总价值。
如果我有一个查询来查找特定客户的所有订单的总价值:
select SUM(o.orderValue) from CustomerOrder o where o.customer = :customer
注释在哪个实体类中是否重要?你为什么要把它放在一个或另一个?
假设我有一个 Customer - CustomerOrder 一对多的双向关系, CustomerOrder 持有每个订单的总价值。
如果我有一个查询来查找特定客户的所有订单的总价值:
select SUM(o.orderValue) from CustomerOrder o where o.customer = :customer
注释在哪个实体类中是否重要?你为什么要把它放在一个或另一个?
注释在哪个实体类中是否重要?
从技术的角度来看,这并不重要,因为您将使用name
a@NamedQuery
来调用它。
你为什么要把它放在一个或另一个?
但是,从“逻辑”的角度来看,将@NamedQuery
“自然”所属的位置放在哪里肯定会减轻维护。在您的示例中,我会将查询放在CustomerOrder
实体中,因为查询是关于CustomerOrder
find 的,如果我必须查找它,这正是我希望找到它的地方。
没关系。一般原则是把它放在逻辑上属于它的地方。在你的情况下 - 最好在CustomerOrder
将它们放在应在persistence.xml 中声明的XML 映射文件中。看到这个很棒的链接:arjan-tijms.omnifaces.org/2010/09/where-to-put-named-queries-in-jpa
许多查询“自然”不属于实体(而且您还必须修改实体代码,如果将它们放在那里,则每次需要新查询时)。