当前位置: 首页 > 面试题库 >

getSingleResult在休眠中返回本机标量查询的代理

狄信然
2023-03-14
问题内容

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

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

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

我想念什么?


问题答案:

总结问题下方的评论:

q.getSingleResult().getClass().getInterfaces()返回什么接口?

这类型的java.sql.Cloborg.hibernate.engine.jdbc.WrappedClobjava.io.Serializable。[…]我什至没有意识到该列是Clob,我很惊讶EclipseLink为我执行了到String的转换

看起来EclipseLink很聪明,可以根据需要将CLOB(实际上是一个很长的字符序列,就像String)转换为String。使用Hibernate必须明确地做到这一点。我猜这符合JPA规范。



 类似资料:
  • 问题内容: 我想按数据库中的条件计数记录数。 我尝试使用下一个查询 但是没有方法可以执行此操作并获得结果。 我知道,我可以使用 所以问题是,查询是否具有更高的性能?如果,那么如何执行查询呢? 问题答案: 您可以通过调用来执行第一个查询,例如。 如果要将计数分配给变量,则需要将其转换为适当的类型(它可以取决于DB,但很可能是Long)。第二个查询效率很低,因为Hibernate需要从数据库中检索整个

  • 问题内容: 尝试使用本机SQL更新数据时出现此错误。这是我的脚本: 是包含多个这样的字符串: 当我更新(使用)时,会引发以下错误: 请求处理失败;嵌套的异常是org.hibernate.exception.DataException:无法执行本机批量操作查询],根本原因是com.mysql.jdbc.MysqlDataTruncation:数据截断:截断了错误的DOUBLE值:‘222,226,2

  • 问题内容: sess.createSQLQuery(“INSERT INTO ARCHIVE (folder) VALUES(:folder)”) .setParameter(“folder”,path) .executeUpdate(); 我想要新创建对象的ID。我怎样才能做到这一点? 问题答案: 试试吧 Integer lastId = (Integer) session.createSQLQ

  • 问题内容: 我在使用Hibernate创建子查询时遇到问题。不幸的是Subqueries类几乎完全没有文档,因此我完全不知道如何将以下SQL转换为Hibernate Criteria: 我希望以下内容能够“正常工作”: 但不幸的是,事实并非如此。因此,看来我实际上必须使用Subqueries类来创建Criteria。但是我无法通过Google找到一个合理的例子,因此这使我在这里提出了疑问。 问题答

  • 问题内容: 当我尝试从数据库中删除条目时,使用 然后我可以执行以下操作: 1)如果该行存在于数据库中,则将执行两个SQL查询:一个选择,然后一个删除 2)如果数据库中不存在该行,则仅执行选择查询 但是同样,更新不是这种情况。无论是否存在数据库行,都只会执行更新查询。 请让我知道为什么这种行为用于删除操作。这不是性能问题,因为遇到了两个查询而不是一个查询? 编辑: 我正在使用休眠3.2.5 样例代码

  • 问题内容: 当我使用sqldeveloper在oracle 10g中运行这样的查询时,它运行良好。 给我名字和国家。当我在hibernate状态下将其作为命名查询运行时,对于“国家/地区”,我只会得到“ C”而不是“加拿大”。 为什么会这样呢? 问题答案: