我可以使用以下脚本:
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)方法的标准行为。
使用反射设置类的字段。因此,我们从哪个表中提取结果并不重要。列名称和类型必须匹配。
最后的一些技巧:
指定为第二个参数的类必须始终是托管实体或可嵌入的
当我尝试仅查询某些列时,由于缺少查询中缺少的列而出现错误。所以我想你总是必须选择所有东西
希望这可以澄清事情。