0

1.Customer_Table 2.Order_Table の 2 つのテーブルがあります。テーブル間には 1 対多のマッピングがあり、1 人の顧客が複数の注文を持つことができます。Customer_id は Customer テーブルの主キーであり、Order テーブルの外部キーです。私の Customer.hbm.xml ファイルのスニペット:

enter code here

    <set name="orders">
        <key column="Customer_id" /><!-- Customer_id acts as foreign key for Order table -->
        <one-to-many   class="Order" />
    </set>

.... 次の顧客の注文を取得するために、Retreive.java ファイルに次のスニペットを記述します。 1.顧客名は Rahul で始まる必要があります。

Criteria criteria1 = session.createCriteria(Customer.class).
        add(Restrictions.like("customerName", "Rahul%"));`
Criteria criteria = criteria1.createCriteria("orders").add(Restrictions.like("orderDescription", "electronics%"));
List list = criteria.list();

私の理解によると、Hibernate は 2 つのテーブルで内部結合を実行し、上記の 2 つの基準に一致するリストを返します。

この後、私の要件は、結果セット (この場合はリスト) から orderDescriptions を取得することです。

その目的を達成するために正確に書く必要があるJavaコードは何ですか???

4

3 に答える 3

1

関連付け全体ではなく、制限された一連の関連付けを取得することに関する私の問題を最終的に解決できました。以下のコード スニペットがお役に立てば幸いです。

Criteria criteria1 = session.createCriteria(Customer.class).
    add(Restrictions.like("customerName", "Rahul%"));`
Criteria criteria = criteria1.createCriteria("orders","order").add(Restrictions.like("orderDescription","electronics%")).setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);//order is alias to orders collection
List<Map> list = criteria.list();

setResultTransformer を使用して、従来の Customer の List ではなく、内部結合の結果を含む Map の List を取得します。

for(Iterator itr = list.iterator();itr.hasNext();){
Map map = (Map)itr.next();
Customer student = (Customer) map.get(Criteria.ROOT_ALIAS);
Order order = (Order) map.get("order");//alias that was used earlier for orders
}
于 2013-09-14T09:28:00.080 に答える