Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JPA准则API/hibernate准则多对多列查询_Hibernate_Criteria Api - Fatal编程技术网

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();
}