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)));
这确保产品具有所有三个功能,而不仅仅是一两个。
我正在使用 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)));
这确保产品具有所有三个功能,而不仅仅是一两个。