gpt4 book ai didi

java - getSingleResult 返回 hibernate 中 native 标量查询的代理

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:14:47 25 4
gpt4 key购买 nike

我正在努力将我的 JPA 持久性提供程序从 EclipseLink 2.3 切换到 Hibernate 3.6.5.Final。问题出在 native 查询上。注意:这不是 EclipseLink 的问题。我正在尝试从我没有为其声明实体的表中获取标量值、String。这是代码:

Query q = em.createNativeQuery("select description from foo where foo_id = ?");
q.setParameter(1, fooId);
String description = (String)q.getSingleResult();

使用 Hibernate 我得到一个 ClassCastException 因为返回的对象实际上是一个代理对象。我不知道它是什么类型,但我知道它不是一个数组(object.getClass().isArray() 是 false)而且我知道它不是一个列表(object instanceof Listfalse)。

我错过了什么?

最佳答案

总结问题下方的评论:

What interfaces does q.getSingleResult().getClass().getInterfaces() return?


It is of type java.sql.Clob, org.hibernate.engine.jdbc.WrappedClob, and java.io.Serializable. [...] I didn't even realize the column was a clob and I'm surprised EclipseLink was doing the conversion to String for me


看起来 EclipseLink 足够聪明,可以根据需要将 CLOB(实际上是很长的字符序列,就像 String)转换为 String。对于 Hibernate,这必须明确地完成。我想这符合 JPA 规范。

关于java - getSingleResult 返回 hibernate 中 native 标量查询的代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8842237/

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