Java 铸造地图<;字符串,字符串>;映射<;长,长>;

Java 铸造地图<;字符串,字符串>;映射<;长,长>;,java,Java,我在一个类中有以下代码,它扩展了Primefaces的LazyDataModel @Override public List<Project> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, String> filters) { 在DAO类中,我还可以在JSF页面中进行搜索并返回结果 public void getProjec

我在一个类中有以下代码,它扩展了Primefaces的
LazyDataModel

@Override
    public List<Project> load(int first, int pageSize,
            String sortField, SortOrder sortOrder, Map<String, String> filters) {
在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);
因为
projectNo
的长度很长

我的问题是如何将
Map
转换为
Map
,这样我就不会在这一行
q.setParameter(“projectNo”,projectNo)中出错

任何帮助都是值得赞赏的

谢谢

您不能将
映射转换为映射
,如果参数映射需要所有数据类型,为什么不使用
映射
映射

在这种情况下,您似乎还可以通过将其强制转换为字符串或在Map中设置之前很久实现修复

String.valueOf(projectNo);

or 

Long.toString(projectNo);

在需要时。

在设置值时将实体类中的字符串修改为字符串。映射是否包含有效数字的字符串?如果是这样,为什么不把
String projectNo
转换成
Long
?我更愿意使用Map和Long.valueOf(projectNo),但我想这也是你的意思,对吧?Map存储接受变量数据类型的参数Map是个好主意,但出于某种原因OP试图转换Long,Long-to-String,String
Hibernate Parameter value [89457] did not match expected type [java.lang.Long]
String.valueOf(projectNo);

or 

Long.toString(projectNo);