@OneToMany上的多个连接,每个都有条件

时间:2013-08-30 13:17:23

标签: java mysql hibernate hql

我有以下结构:

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中执行此操作?

它不在但包含。

1 个答案:

答案 0 :(得分: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: illegal attempt to dereference collection