0

私は次の製品クラスを持っています

productClass
productID
name
make
title
colors {1..*}.

私は取得しようとしています

productIDcolorsおよびnameフィールドのみ..

シングルattirbutecolorListは動作しますが、リトリーブではありませんでした。

そして何よりも最悪..基準(restrictions.in)があると、SQLが適切に形成されていないと表示されます..属性y1_がありません

良い例は

プロジェクションを使用した Hibernate 基準が @OneToMany マッピングのクエリを実行しない

プロジェクトを使用して、経費をそのままにしてPAYMENTを取得しようとしていますが、それ以外の場合は、経費のいくつかのフィールドを取得しようとしています

4

2 に答える 2

0

私があなたを正しく理解していれば、そのようなクエリを目的に使用できます。

    List<Object[]> results = sess.createCriteria(Category.class, "category")
                .add(Restrictions.in("category.name", new String[]{"Test1", "Test2"}))
                .createAlias("items", "item")
                .setProjection(Projections.projectionList()
                        .add(Projections.property("category.id"), "categoryId")
                        .add(Projections.property("category.name"), "categoryName")
                        .add(Projections.property("item.name"))
                        .add(Projections.property("item.initialPrice")))
         .list();

結果の各行を表す Object[] 配列のリストを返します。

Color エンティティの構造とそこから必要なフィールドがわからないため、カテゴリとアイテムの 2 つのデフォルト エンティティの例を投稿しました (これらの関係は、あなたの場合のように 1 対多です)。

配列の代わりにリストを使用できます。たとえば、上記の例の制限を次のように定義できます。

 List<String> inRestrictions = new ArrayList<String>();
 inRestrictions.add("Test1");
 inRestrictions.add("Test2");

    ...
    .add(Restrictions.in("category.name", inRestrictions))
    ...

編集:

色のリストを含む Product オブジェクトが必要な場合は、それのみをフェッチします。正しいマッピングを定義すると、Colors リストが (遅延または積極的に) フェッチされます。

List<Product> results = sess.createCriteria(Product.class)
       .add(Restrictions.in("... necessary restrictions")
       .list()
于 2012-08-03T07:24:00.813 に答える