在我的项目中,我有单向的2多个关联:
@Entity
@Table(name="product")
class Product{
@Enumerated(EnumType.String)
@Id
@Access(AccessType.Property)
private ProductType type;
@Column
private String name;
}
@Entity
class User{
@Id
@Access(AccessType.Property)
@GeneratedValue
private Long id;
@ManyToMany
private Set<Product> sold = new HashSet<Product>();
...
}
这些表是由Hibernate生成的,即。 3个表:用户,产品,用户_产品。 现在,我想创建一个复杂的HQL查询,其中包括销售具有给定ProductType(枚举为产品ID)的产品的用户。 一开始我试过:
"from User u where u.sold.id =?"
但不幸的是,我非法尝试取消引用收集。 这两项工作:
"select u from User u join u.sold p where p.id =?"
"select u from User u, IN (u.sold) p where p.id =?"
但是看看Hibernate生成的SQL我可以看到我有2个连接:user - &gt; user_product - &gt;产品。加入产品过度。由于按销售产品过滤用户只是复杂查询的乞讨,我希望保持连接数尽可能小。 任何想法我怎么能改写查询。