Hibernate Many2Many对实体id进行重写

时间:2011-10-28 12:47:52

标签: hibernate hql

在我的项目中,我有单向的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;产品。加入产品过度。由于按销售产品过滤用户只是复杂查询的乞讨,我希望保持连接数尽可能小。 任何想法我怎么能改写查询。

0 个答案:

没有答案