0

我有以下结构:

产品.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”作为字段名称的原因。您应该将其替换为您想要匹配的正确字段名称。我还使用 'join' 作为示例的连接类型。您应该将其替换为您要使用的连接类型(例如内连接、左外连接等)。

让我知道这是否适合你。我自己没试过:)

对我有帮助的参考资料是:

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

HQL:非法尝试取消引用集合

于 2013-08-30T15:42:04.233 回答