LazyDataModel
Primefacesを拡張するクラスに次のコードがあります
@Override
public List<Project> load(int first, int pageSize,
String sortField, SortOrder sortOrder, Map<String, String> filters) {
上記のフィルターのタイプはMap<String, String>
私のHibernate Entityクラスには、次のものがあります
private Long projectNo; // with getters and setters
そしてDAOクラスでは、JSFページで検索を行い、結果を返すために次のものもあります
public void getProjects(ProjectQueryData data) {
Map<String, String> filters = data.getFilters();
// ....
....
String projectNo = filters.get("projectNo");
List<Predicate> criteria = new ArrayList<Predicate>();
if (projectNo!= null) {
ParameterExpression<String> pexp = cb.parameter(String.class,
"projectNo");
Predicate predicate = cb.equal(emp.get(Project_.projectNo),
pexp);
criteria.add(predicate);
}
TypedQuery<Project> q = entityManager.createQuery(c);
TypedQuery<Long> countquery = entityManager.createQuery(countQ);
q.setParameter("projectNo", projectNo); // error in this line
countquery.setParameter("projectNo", projectNo);
上記を実行すると、次の例外が発生します
Hibernate Parameter value [89457] did not match expected type [java.lang.Long]
projectNo
ロングだから。
私の質問は、この行でエラーが発生しないようにキャストMap<String,String>
するにはどうすればよいかですMap<Long,Long>
q.setParameter("projectNo", projectNo);
どんな助けも非常に高く評価されます。
ありがとう