基于面向对象的方法,我编写了以下实体:
@Entity
public class Customer {
@Id
private String id;
@OneToMany
private List<Order> orders;
public BigDecimal getTotal() {
// iterate over orders and sum the total
BigDecimal total = BigDecimal.ZERO;
for (Order o: orders) {
total = total.add(o.getTotal());
}
return total;
}
... // getter & setter
}
@Entity
public class Order {
@Id
private String id;
private BigDecimal total;
...
}
我意识到当调用getTotal()
a 的方法时Customer
,Hibernate 会发出一个SELECT * FROM Order
查询来检索所有Orders
. Order
随着岁月的流逝,数量肯定会增加。我相信aSELECT SUM(o.total) FROM Order o
会给出更好的表现,CMIIMW。我只是不知道我应该把查询放在哪里?面向对象设计的规则建议它getTotal()
应该是 的一部分Customer
,但我使用的框架(Spring Transaction)不允许域对象中的事务。