可以createNativeQuery的EnityManager返回resultClass即dojo类

时间:2017-01-19 17:41:24

标签: jpa orm

我可以使用以下脚本:


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

问题:
当我打电话给以下方法时会返回什么:
A- entityManager.createNativeQuery("SELECT * FROM EntityTable",EntityClass.class);

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

它们是否正确?

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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

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

最后几点提示:

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

希望这能澄清事情。