将Map <string,string>转换为Map <long,long> </long,long> </string,string>

时间:2013-03-05 18:47:23

标签: java

我在扩展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);

任何帮助都非常值得赞赏。

由于

1 个答案:

答案 0 :(得分:3)

您无法投射Map<String,String> to Map<Long,Long>,如果您的参数Map期望所有数据类型,为什么不使用Map<Object,Object>Map<String,Object>

在这种情况下,您似乎也可以通过将其强制转换为字符串来实现修复,或者在设置Map之前很长时间,

String.valueOf(projectNo);

or 

Long.toString(projectNo);

任何需要的地方。