Jpa 在HashSet中添加数据库数据以填充SelectItem
我使用上述方法填充Primefaces 4 filterOption dataTable列: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地址)
<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;
}