2016-05-09 16 views
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=? 

答えて

1

式は常に初期に評価されますselect、遅延プロパティはサイレントになりますエンティティクラスのバイトコード計測(例:Ant/Maven経由)を追加しない限り、無視されます。 1対1の結合についても同様です。

関連する問題