1
エンティティから計算フィールドを取得したいのですが数式による遅延ロードが機能しない
私はお客様実体を持っていると私は顧客が注文した総受注を知りたいが、私は遅延読み込みがフェッチ必要なので、私はときCustomer.getTotalOrders(「受注総額」フィールドが計算されることを期待して)それは呼ばれています。
以下の設定では遅延ロードが機能せず、totalOrdersが常に計算されています。 私は間違っていますか?
CustomerエンティティのXMLマッピング:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.tumrapp.entities.Customer" table="customers">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="identity" />
</id>
<property name="name" type="string">
<column name="name" not-null="true" />
</property>
<property update="false" insert="false" name="totalOrders" type="int" lazy="true"
formula="(select count(o.id) from orders o where o.customer_id = id)">
</property>
</class>
</hibernate-mapping>
Customerエンティティクラス:
public class Customer implements java.io.Serializable {
private static final long serialVersionUID = 1L;
private Integer id;
private String name;
private Integer totalOrders;
//constructors
//simple getters and setters
}
クエリは、Hibernateのコンソールに表示:
select
customer0_.id as id61_0_,
customer0_.name as name61_0_,
(select
count(o.id)
from
orders o
where
o.customer_id = customero0_.id) as formula1_0_
from
customer customer0_
where
customer0_.id=?