0

私は次の構造を持っています:

Product.Java :

String name

@OneToMany(mappedBy="product")
private List<ProductServingTimeAvailablity> servingTimeAvailablities;

@OneToMany(mappedBy="product")
private List<ProductStyles> styles;

@OneToMany(mappedBy="product")
private List<ProductLocationAvailability> locationAvailabilites;

すべての製品を取得する必要があります

  • product.servingTimeAvailablities には 1 と
  • product.styles には 2 と
  • product.locationAvailabilites には 3 が含まれます

(つまり、各製品には多くの時間の在庫と多くのスタイルと多くの場所がある可能性があり、時間 1 で利用可能で、スタイル 2 で場所 3 で利用可能な製品のみを選択する必要があります)

HQLでどうすればいいですか?

入っていませんが入っています。

4

1 に答える 1

1

次のようなものが機能するはずです。

SELECT product FROM Product product
    join product.servingTimeAvailablities as servingTimeAvailablities
    join product.styles as styles
    join product.locationAvailabilites as locationAvailabilites
    WHERE servingTimeAvailablities.someProperty = :somePropertyValue1
    AND styles.someProperty = :somePropertyValue2
    AND locationAvailabilites.someProperty = :somePropertyValue3

オブジェクトの内部構造がわからないため、フィールド名として「someProperty」を使用しました。一致させたい適切なフィールド名に置き換える必要があります。この例では、結合タイプとして「結合」も使用しました。これを、使用する結合の種類 (内部結合、左外部結合など) に置き換える必要があります。

それがうまくいくかどうか教えてください。私はそれを自分で試したことはありません:)

私を助けた参考文献は次のとおりです。

http://docs.jboss.org/hibernate/orm/3.6/reference/en-US/html/queryhql.html#queryhql-select

HQL: コレクションを逆参照する不正な試み

于 2013-08-30T15:42:04.233 に答える