Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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 在HashSet中添加数据库数据以填充SelectItem_Jpa_Collections_Primefaces_Filtering - Fatal编程技术网

Jpa 在HashSet中添加数据库数据以填充SelectItem

Jpa 在HashSet中添加数据库数据以填充SelectItem,jpa,collections,primefaces,filtering,Jpa,Collections,Primefaces,Filtering,我使用上述方法填充Primefaces 4 filterOption dataTable列: <p:column filterBy="#{item.prefDep}" filterOptions="#{upbController.prefDepItems}" > 提前谢谢。问题出在 setList.add(新的SelectItem(id.getPrefDep()) 因为集合会将每个SelectItem视为一个不同的项(我猜equals方法不会比较值,只比较SelectItem地址)

我使用上述方法填充Primefaces 4 filterOption dataTable列:

<p:column filterBy="#{item.prefDep}" filterOptions="#{upbController.prefDepItems}" >
提前谢谢。

问题出在 setList.add(新的SelectItem(id.getPrefDep()) 因为集合会将每个SelectItem视为一个不同的项(我猜equals方法不会比较值,只比较SelectItem地址)

解决方案是更改getPrefDepsList方法,以便在使用时返回一组T或Upb,或者执行以下操作:

public Set<SelectItem> getPrefDepItems() {
    Set<SelectItem> setList = new HashSet<>();
    setList.add(new SelectItem("", "Options..."));

    Set<Upb> setPrefDeps = new HashSet<>();
    setPrefDeps.addAll(getPrefDepsList());
    for (Upb id : setPrefDeps) {   

        setList.add(new SelectItem(id.getPrefDep()));
    }
    return setList;
}
public Set getPrefDepItems(){
Set setList=新的HashSet();
添加(新选择项(“,”选项…);
Set setPrefDeps=new HashSet();
setPrefDeps.addAll(getPrefDepsList());
对于(Upb id:setPrefDeps){
add(新的SelectItem(id.getPrefDep());
}
返回集合列表;
}

还要确保将equals和hashCode放入Upb。

您是否在实体中正确实现了
hashCode()
equals()
方法?是的。但是,对不起,你问这个问题是什么意思?你在哪里调用命名查询?嗨。在上面的托管bean中,我看到您正在创建一个条件查询,但是我没有看到对命名查询的任何引用。
public List<T> getPrefDepsList() {
    if (prefDeps == null) {
        prefDeps = this.ejbFacade.findPrefDeps();
    }
    return prefDeps;
}
public List<T> findPrefDeps() {
    javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
    cq.select(cq.from(entityClass));
    return getEntityManager().createQuery(cq).getResultList();
}
@NamedQuery(name = "Upb.findPrefDeps", query = "SELECT DISTINCT u.prefDep FROM Upb u")
public Set<SelectItem> getPrefDepItems() {
    Set<SelectItem> setList = new HashSet<>();
    setList.add(new SelectItem("", "Options..."));

    Set<Upb> setPrefDeps = new HashSet<>();
    setPrefDeps.addAll(getPrefDepsList());
    for (Upb id : setPrefDeps) {   

        setList.add(new SelectItem(id.getPrefDep()));
    }
    return setList;
}