【问题标题】:ClassCastException in hibernate with unknown source of HashMap休眠中的 ClassCastException 与 HashMap 的未知来源
【发布时间】:2018-04-17 09:27:51
【问题描述】:

我目前卡在 ClassCastException 上,无法弄清楚到底发生了什么。

注意为了简单起见,查询本身已被更改,因为我认为问题出在其他地方。

情况如下:我想检索我的服务类中的数据库条目列表:

List<Object[]> queryList = dao.queryGenericArray("SELECT a, b FROM db");

在我的理解中,方法 queryGenericArray 应该返回 对象数组列表,在 DAO 类中定义:

List<Object[]> result = q.list();

list() 由 hibernate 定义。

所以现在我的 queryList 对象数组没有任何错误,到目前为止一切顺利。但是当我尝试从 queryList 访问一个数组时,我得到一个 ClassCastException 说明:

java.lang.ClassCastException:java.util.HashMap 无法转换为 [Ljava.lang.Object;

我现在的问题是,列表条目为什么以及在哪里定义为 HashMap ?

提前致谢,如果我遗漏了任何重要信息,请告诉我。

Stacktrace

【问题讨论】:

  • 能否请您发布堆栈跟踪
  • hashMap 的内容到底是什么?关键是什么?
  • 我期待一个对象数组,对象是 。不知道内容是什么,如果我在 queryList 条目上运行 .getClass(),我会得到 arrayList 作为类型。
  • 放置一个调试点,看看你得到了什么..
  • 不确定如何添加调试点,但我会弄清楚并在我成功时回复。

标签: java hibernate classcastexception


【解决方案1】:

好的,我想通了,感谢我最初问题的 cmets。

问题是,我监督(或忽略了)DAO 类中的一行代码(我不是该类的作者):

q.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);

这一行将object[] 转换为地图,非常简洁。

我还需要做的是,首先将我的 queryGenericArray 方法的返回类型从 object[] 更改为 List&lt;HashMap&lt;String, Date&gt;&gt;,然后像这样转换休眠方法的结果:

List&lt;HashMap&lt;String, Date&gt;&gt; result = q.list();

现在我可以正确访问传递列表中包含的哈希图中的数据了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-13
    • 2012-07-15
    • 2018-12-18
    • 2013-05-31
    • 1970-01-01
    相关资源
    最近更新 更多