可以createNativeQuery的EnityManager返回resultClass即dojo类

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了可以createNativeQuery的EnityManager返回resultClass即dojo类相关的知识,希望对你有一定的参考价值。

我可以有以下脚本:

1.我有一个实体类 - EntityClass(使用EntityTable进行映射) 2.我有一个dojo类 - DojoClass 这两个类都有相同的变量。

题: 当我调用以下方法时将返回什么: A- entityManager.createNativeQuery("SELECT * FROM EntityTable",EntityClass.class);

B- entityManager.createNativeQuery("SELECT * FROM EntityTable",Dojo.class);

他们是对的吗?

答案

这是一个非常不寻常的用例,我猜测只是理论上的。

我已经按照您的方式进行了配置,最值得注意的是两个实体具有完全相同的基本字段(这些是在将结果映射到类时将考虑的那些)。

我正在使用JPA 2.1和Hibernate 5.x作为引擎下的实现。

令我困惑的是,两个查询都正常运行并将结果按预期分配给每个类中的相应字段。

我更深入地了解了实现,基本上幕后发生的事情是:

  • 创建一个类型为List<Object[]>的列表作为第一步,这是没有指定类的createNativeQuery(String)方法的标准行为。
  • 使用反射设置类的字段。因此,从哪个表中提取结果并不重要..列名和类型必须匹配..

最后几点提示:

  • 指定为第二个参数的类必须始终是托管实体或可嵌入
  • 当我试图只查询某些列时,我遇到了缺少查询缺失列的错误。所以我想你总是要选择一切

希望这能澄清事情。

以上是关于可以createNativeQuery的EnityManager返回resultClass即dojo类的主要内容,如果未能解决你的问题,请参考以下文章

createNativequery 中的 sql 注入

使用 entityManager.createNativeQuery(query,foo.class)

Hibernate CreateNativeQuery返回空列表

在 createNativeQuery 中使用 generate_series 时出错

如何使用 CreateNativeQuery 从 SQL 数据库值中查询单个值?

在通过 createNativeQuery() 查询时,列名混合了大写和小写的列名被转换为小写 [重复]