【发布时间】:2018-06-26 20:16:03
【问题描述】:
我是 Hibernate 的新手,我需要一些自定义查询,所以我使用 SQLQuery 以下是我正在使用的代码。
List getResult(String queryString, List<String> bindList, String className) {
SQLQuery sqlQuery = session.createSQLQuery(queryString);
int i=0;
for (String value : bindList) {
query.setString(i, value);
i++;
}
if(className != null)
{
sqlQuery.setResultTransformer(Transformers.aliasToBean(Class.forName(className)));
}
}
这里的问题是其中一个列值作为 clob 类型返回,但与 clob 匹配的相应 DTO 值的类型是 String,因此我必须将该 clob 值更改为 String。有什么好的解决方案吗?
据我所知,sqlQuery 有 list() 方法,它返回对象集合,包括查询结果行。那么有什么方法可以操纵该列表的内容吗?
我尝试的方式如下。我有通过执行查询返回的三列值,布尔值,字符串和字符串(从clob转换而来)
List<Object[]> rows = sqlQuery.list();
row = rows.get(0);
java.sql.Clob cValue = (java.sql.Clob)row[2];
String str_value = cValue.getSubString(1, (int)cValue.length());
List<Object[]> rows = new ArrayList<Object[]>();
Object[] obj = new Object[3];
obj[0] = new Boolean(row[0]);
obj[1] = new String(row[1]);
obj[2] = new String(str_value);
rows.add(obj);
return rows;
但是日志说 java.lang.ClassCastException:[Ljava.lang.Object;不能转换为 SourceDTO。 (有点预期)我在想的是我认为我可以操纵结果列表并使用匹配的 SourceDTO 返回它。任何人都可以对此有一些解决方案吗?
【问题讨论】: