JPA准则API/hibernate准则多对多列查询
我有下表JPA准则API/hibernate准则多对多列查询,hibernate,criteria-api,Hibernate,Criteria Api,我有下表 @Entity @Table(name="resource") public class Resource implements Serializable { @javax.persistence.Id @Column(name="resource_id") private Long id; private String name; private String description; @ManyToMany( fetch = Fet
@Entity
@Table(name="resource")
public class Resource implements Serializable {
@javax.persistence.Id
@Column(name="resource_id")
private Long id;
private String name;
private String description;
@ManyToMany( fetch = FetchType.EAGER)
@JoinTable(name="resource_attribute_item", joinColumns = { @JoinColumn (name =
"resource_id")},
inverseJoinColumns = {@JoinColumn (name="attribute_item_id")})
private List<AttributeItem> attributeItems;
id和名称字段看起来很简单,我只需执行以下cb.equal(root.get(“name”),example.getName())
但是对于多对多列的attributeItems呢
提前感谢我最终解决了以下问题
公共列表查找(资源示例){
CriteriaBuilder cb=getCurrentSession().getCriteriaBuilder();
CriteriaQuery-CriteriaQuery=cb.createQuery(Resource.class);
Root=criteriaQuery.from(Resource.class);
ArrayList谓词=新的ArrayList();
if(例如.getId()!=null)
add(cb.equal(root.get(“id”)、example.getId());
if(例如.getName()!=null)
add(cb.equal(root.get(“name”),example.getName());
if(例如.getAttributeItems()!=null&&example.getAttributeItems().size()!=0){
Join AttributeItemusingJoin=root.Join(“attributeItems”);
List attributeItems=example.getAttributeItems();
for(AttributeItem属性:attributeItems){
add(cb.equal(attributestemusingjoin.get(“id”)、attribute.getId());
}
}
谓词[]所有谓词=新谓词[predicates.size()];
toArray(所有谓词);
criteriaQuery=criteriaQuery.where(所有谓词);
Query Query=getCurrentSession().createQuery(criteriaQuery);
返回query.getResultList();
}
我最终解决了以下问题
公共列表查找(资源示例){
CriteriaBuilder cb=getCurrentSession().getCriteriaBuilder();
CriteriaQuery-CriteriaQuery=cb.createQuery(Resource.class);
Root=criteriaQuery.from(Resource.class);
ArrayList谓词=新的ArrayList();
if(例如.getId()!=null)
add(cb.equal(root.get(“id”)、example.getId());
if(例如.getName()!=null)
add(cb.equal(root.get(“name”),example.getName());
if(例如.getAttributeItems()!=null&&example.getAttributeItems().size()!=0){
Join AttributeItemusingJoin=root.Join(“attributeItems”);
List attributeItems=example.getAttributeItems();
for(AttributeItem属性:attributeItems){
add(cb.equal(attributestemusingjoin.get(“id”)、attribute.getId());
}
}
谓词[]所有谓词=新谓词[predicates.size()];
toArray(所有谓词);
criteriaQuery=criteriaQuery.where(所有谓词);
Query Query=getCurrentSession().createQuery(criteriaQuery);
返回query.getResultList();
}
就连我也有类似的问题。请查收。这可能会有所帮助。谢谢,我最终解决了这个问题。看我的回答,即使我有类似的问题。请查收。这可能会有所帮助。谢谢,我最终解决了这个问题。看到我的答案了吗
public List<Resource> find(Resource example) {
CriteriaBuilder cb = getCurrentSession().getCriteriaBuilder();
CriteriaQuery<Resource> criteriaQuery = cb.createQuery(Resource.class);
Root<Resource> root = criteriaQuery.from(Resource.class);
ArrayList<Predicate> predicates = new ArrayList<Predicate>();
if(example.getId()!= null)
predicates.add(cb.equal(root.get("id"),example.getId()));
if(example.getName()!= null)
predicates.add(cb.equal(root.get("name"),example.getName()));
if(example.getAttributeItems()!=null && example.getAttributeItems().size()!= 0)
// How do I implement
Predicate[] all = new Predicate[predicates.size()];
predicates.toArray(all);
criteriaQuery = criteriaQuery.where(all);
Query query = getCurrentSession().createQuery(criteriaQuery);
return query.getResultList();
}