1

LazyDataModelPrimefacesを拡張するクラスに次のコードがあります

@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);

どんな助けも非常に高く評価されます。

ありがとう

4

1 に答える 1

3

パラメータ Map がすべてのデータ型を期待している場合は、キャストできませんMap<String,String> to Map<Long,Long>。使用しないのはなぜですか。Map<Object,Object>Map<String,Object>

この場合、文字列にキャストするか、マップで設定するずっと前に、修正を行うこともできるようです。

String.valueOf(projectNo);

or 

Long.toString(projectNo);

必要な場所。

于 2013-03-05T18:53:36.013 に答える