Hibernate一对多匹配多个Id

Hibernate One-To-Many Match multiple Ids

我正在使用 Hibernate 4 和 JSF 2。

给定以下映射

@Entity
@Table(name = "feature")
public class Feature 
{

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Column
    private String name;

}

@Entity
@Table(name = "product")
public class Product
{

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Column
    private String name;

    @OneToMany(fetch = FetchType.LAZY)
    @JoinTable(name = "product_feature", joinColumns = @JoinColumn(name = "product_id"), inverseJoinColumns = @JoinColumn(name = "feature_id"))
    private Set<Feature> features = new HashSet<Feature>(0);

}

数据库结构

Product
---------
id
name

Feature
---------
id
name

Product_Feature
----------------
product_id
feature_id

我现在想做的是构建一个 DetachedCriteria 来获取所有具有特征 1,2 和 3 的产品。不仅是其中一个,而是所有。

我只是无法获得正确的限制,无法找到匹配所有给定功能的产品,而不仅仅是一个。

DetachedCriteria criteria = DetachedCriteria.for(Product.class, "product");
criteria.createAlias("product.features", "feature");

如有任何帮助,我将不胜感激。提前致谢。

我通过添加以下 sql 限制修复了它。

String features = "1,4,5";
int featureSize = 3;

DetachedCriteria criteria = DetachedCriteria.for(Product.class, "product");

criteria.add(Restrictions.sqlRestriction(String.format("(SELECT COUNT(*) FROM product_feature pf where pf.feature_id in(%s) and pf.product_id={alias}.id)=%d", features, featureSize)));

这确保产品具有所有三个功能,而不仅仅是一两个。