HQL查询多对多的Explict关系

时间:2017-02-26 12:53:41

标签: java sql hibernate many-to-many hql

我正在尝试为以下模型编写hql。

Product.java

@Entity public class Product implements Serializable {

    private static final long serialVersionUID = -3532377236419382983L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int productId;

    @NotEmpty(message = "The product name must not be empty")
    private String productName;

    private String productCategory;

    private String productDescription;

    @ManyToMany
    @JsonIgnore     @JoinTable(name="PRODUCT_SUBCATEGORY", 
                joinColumns={@JoinColumn(name="productId")}, 
                inverseJoinColumns={@JoinColumn(name="subCategoryId")})
    private Set<SubCategory> subCategory = new HashSet<SubCategory>(); //getter setter

SubCategory.java

@Entity
public class SubCategory implements Serializable {


    private static final long serialVersionUID = 7750738516036520962L;

    @Expose(serialize = true, deserialize = true)
    @Id
    @GeneratedValue
    private Integer subCategoryId;

    @Expose(serialize = true, deserialize = true)
    @NotEmpty(message = "The subcategory name must not be empty")
    @Size(min = 3, max = 20, message = "Minimum 3 to 20 characters allowed")
    private String subCategoryName;

    @Expose(serialize = false, deserialize = false)
    @ManyToOne
    @JoinColumn(name="categoryId")
    private Category category;
//getter setter

我想查询子类别表的子类别名称,以通过PRODUCT_SUBCATEGORY表获取产品数据。示例查询如下所示。

select * from product where productid in(
select psc.productid from
subcategory sc
inner join product_subcategory psc
on sc.subcategoryid=psc.subcategoryid
where sc.subcategoryname like 'men ware%');

如何在hql中实现上述sql。

谢谢。

1 个答案:

答案 0 :(得分:1)

select distinct p from Product p 
join p.subCategory sc 
where sc.subCategoryName like :name