2012-03-26 8 views
3

私は、Hibernateによって管理される木のようなオブジェクトを持っています。オブジェクトは、子のリストを持っており、それぞれの子は親の中で独自のcustom_orderを持っていますマップされていないプロパティの休止状態

<hibernate-mapping> 
    <class name="MyClass" .../> 
    <property .../> 
    <property .../> 
    <list name="children" cascade="save-update" inverse="false"> 
    <key column="parent_id"/> 
    <index column="custom_order"/> 
    <one-to-many class="MyClass"/> 
    </list> 
</hibernate-mapping> 

custom_orderは、親の中に子供の秩序を維持するためにここに存在しますが、Java POJOには表現を持っていないとありますHibernateによって直接管理されます。私がする必要があるのはリストを提供することだけで、custom_orderは自動生成されます。ここまでは順調ですね。

私が達成したいのは、Criteria APIを使用して、custom_orderで注文することです。現時点では、このようなPOJOプロパティがないので、

のような何もできません。

質問:このシナリオでは、POJOゲッター/セッターを追加せずにCriteria APIを使用する方法はありますか?

編集:関連するcustom_order属性をMyClassに追加しても構いませんが、これはHibernateでは可能ではないと思います。

答えて

2

custom_order属性をMyClassに割り当てることは、この属性にゲッターまたはセッターを追加することなく可能です。 custom_order属性をフィールドでアクセスするように設定するだけです。

<property name="customerOrder" column="custom_order" access="field" insert="false" update="false"/> 

現在、基準APIでOrderのみマッピングされたプロパティを処理することができますcustom_orderは読み取り専用にするfalseinsertupdateを設定することにより行い、リフレクションを使用してcustom_orderプロパティを変更することから、開発者を防ぐためにも

、 。 custom_order属性をMyClassにマップしたくない場合は、Criteria APIサポートのOrderがネイティブSQLでソートする場合に目的を達成できます。そここのサポートのためのいくつかの要求は、HHH-1356(あるHHH-2381HHH-3315)彼らは今も未解決です。

幸いにも、誰かがすでにextended the Order class in order to support ordering by native SQLを持っていた。だから、あなたはMyClassためcustom_order列をマップしない場合、あなたは、単にこの拡張を使用することができます注文クラス:

addOrder(new NativeSQLOrder("custom_order" ,true)) 
+0

私は必要なだけ正確に! – mindas

0

条件付きクエリにマップされていないプロパティを含めることはできません。 Hibernateは、criteria.list()またはcriteria.uniqueResult()を実行したときに、nuマップされたプロパティ例外をスローします。

+0

このようなリストインデックスのプロパティを定義するにはどうすればよいですか? – mindas