на основе объектно-ориентированного подхода, я пишу следующие объекты:Как оптимизировать этот дизайн OO в Hibernate ORM?
@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()
для Customer
, Hibernate будет выдавать SELECT * FROM Order
запрос для получения всех Orders
. Количество лет Order
, несомненно, возрастет с годами. Я считаю, что SELECT SUM(o.total) FROM Order o
даст лучшую производительность, CMIIMW. Я просто не знаю, где я должен поставить запрос? Правила объектно-ориентированного проектирования предполагают, что getTotal()
должен быть частью Customer
, но используемая структура (Spring Transaction) не позволяет транзакции в объектах домена.
Когда-либо вычисленное поле, как показано в ответах на [этот вопрос] (http://stackoverflow.com/questions/2986318/calculated-property-with-jpa-hibernate)? –
[Здесь] (http://www.jroller.com/eyallupu/entry/hibernate_derived_properties_performance_and) ваш ответ. –
Благодарим вас за ответ. Раньше я никогда не слышал о @Formula, но это решит мою проблему. –