gpt4 book ai didi

java.lang.ClassCastException : java. util.Arrays$ArrayList 无法在 DAO 中转换为 java.lang.Integer

转载 作者:行者123 更新时间:2023-12-02 08:55:18 24 4
gpt4 key购买 nike

我的 Dao 类中有以下方法

public Collection<Files> findFilesByFolder(Collection<Integer> ids) {
if (ids.size() > 0) {
StringBuffer qbe = new StringBuffer("select f from Files f where f.folders.idFolders in ( :id )");
return super.list(qbe, "id", ids);
}
else {
return new ArrayList<Files>(0);
}
}

当我调用这个函数时,它返回java.lang.ClassCastException:java.util.Arrays$ArrayList无法转换为java.lang.Integer异常

这里是list()的声明。我希望hibernate正在处理集合。但不知道这如何导致类转换异常。谢谢

protected Collection<T> list(StringBuffer qbe, Object... parameterMap) throws InfrastructureException {
return this.findByQuery(qbe.toString(), parameterMap);
}

@SuppressWarnings("unchecked")
public Collection<T> findByQuery(String qbe, Object... parameterMap) throws InfrastructureException {
return (Collection<T>) anonymousFindByQuery(qbe, parameterMap);
}
-------------------------------------------------------------------------------------------
public Collection<?> anonymousFindByQuery(String qbe, Object ...parameterMap)
throws InfrastructureException{
getSession();
try {
Query q = createQuery(qbe, parameterMap);
return q.list();
} //end try
catch (HibernateException ex) {
WLog.DAOLogger.error("HibernateException", ex);
throw new InfrastructureException(ex);
} //end
}
--------------------------------------------------------------------------------------
protected Query createQuery(String qbe, Object... parameterMap) throws InfrastructureException {
Session session = getSession();
Query q = session.createQuery(qbe);

String formattedQuery = String.format("%s ", qbe);

for (int i = 0; i < parameterMap.length; i = i + 2) {

//Put the data in easy to use forms.
Object key = parameterMap[i];
Object value = parameterMap[i + 1];
String formattedKey = String.format(":%s ", key);

if(value == null || formattedQuery.indexOf(formattedKey) == -1){
continue;
}

if(value instanceof ArrayList){
q.setParameterList(key.toString(), (Collection<?>)value);
}
else{
q.setParameter(key.toString(), value);
}
}
return q;
}

最佳答案

如果您使用 Arrays.asList() 函数将元素传递给 dao 函数 public Collection findFilesByFolder(Collection ids) ,则可能会出现此问题。

在这种情况下,对象实例将不是 ArrayList 类。它将是 Arrays$ArrayList 类型。我根据您粘贴的错误消息猜测这一点。

您的代码流转到循环中的其他部分,该部分调用 setParameter 而不是 setParameterList。当您将 Array$ArrayList 对象传递给 setParameter 函数时,它会尝试转换列表对象,但由于明显的原因而失败,因此出现错误。

如果传递使用 new ArrayList() 函数创建的 ArrayList 对象。应该可以正常工作。

关于java.lang.ClassCastException : java. util.Arrays$ArrayList 无法在 DAO 中转换为 java.lang.Integer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60529813/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com