我可以使用以下脚本:


1.我有一个实体类-EntityClass(用EntityTable映射)
2.我有一个道场课程-DojoClass
3.这两个类具有相同的变量。

题:
当我调用以下方法时,将返回什么:
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)方法的标准行为。
使用反射设置类的字段。因此,我们从哪个表中提取结果并不重要。列名称和类型必须匹配。


最后的一些技巧:


指定为第二个参数的类必须始终是托管实体或可嵌入的
当我尝试仅查询某些列时,由于缺少查询中缺少的列而出现错误。所以我想你总是必须选择所有东西


希望这可以澄清事情。

08-27 05:34