【发布时间】:2021-05-03 12:43:27
【问题描述】:
我执行一个 SQLQuery 来接收每个名称并计算该名称被调用的次数。从查询中,我得到一个对象类型的列表。我知道查询本身没问题,在数据库上进行了测试,得到了我想要的。
期望的(和收到的)结果:
| name | count |
|---|---|
| :name1 | :100 |
| :name2 | :200 |
当我尝试将每个 Object 对象(从结果列表中)转换为我的 LocalClass 类型时,我得到:
SEVERE: Servlet.service() for servlet [myWebService] in context with path [/myWebService] threw exception [Request processing failed; nested exception is java.lang.ClassCastException: Cannot cast [Ljava.lang.Object; to com.company.services.EmailBLImpl$1InnerClass] with root cause
java.lang.ClassCastException: Cannot cast [Ljava.lang.Object; to com.company.services.EmailBLImpl$1InnerClass
或者问题应该是如何从 SQL 查询中直接获得 List<InnerClass> list?
代码:
@SuppressWarnings("unchecked")
@Override
public void myMethod(User user, Date dateFrom, Date dateUntil) {
@Data
class InnerClass {
private String name;
private Long count;
}
List<Object> list = sessionFactory
.getCurrentSession()
.createSQLQuery("SELECT wsService as service, count(*) as count"
+ " FROM (SELECT * FROM `table` WHERE user=" + user.getId() + ") a"
+ " GROUP BY wsService"
+ " ORDER BY count DESC")
.list();
for (Object o : list) {
// line below causes the error
InnerClass ic = InnerClass.class.cast(o);
}
}
【问题讨论】:
标签: java mysql sql hibernate casting