java - JPA createNativeQuery 未映射到实体类

标签 java hibernate entitymanager jpa

我正在尝试使用 createNativeQuery 从数据库获取结果集并将其映射到实体对象列表。

当我这样做的时候

List<MyObject> results = this.em.createNativeQuery(query, MyClass.class).getResultList();

我最终得到了一个大小正确的实体对象数组,并正确映射到列,但它们都是相同的对象。对于列表中的每个条目,返回的第一个结果都会重复。

enter image description here

在上图中,您可以看到我取回了数据,如果我检查 ovbjects,它们就会正确映射到我的列。但它们都是同一个对象。

但如果我这样做

List<Object[]> objects = this.em.createNativeQuery(query, Object.class).getResultList();

我得到了一个不同对象的列表,就像它应该的那样。但它们没有映射到我的实体类。

enter image description here

在上图中,您可以看到,当我使用 Object 而不是实体类类型时,我为返回的每一行获得了不同对象的结果集。我不明白为什么当我使用实体类时它只是一遍又一遍地重复同一行。

有谁知道是什么导致我每次都获得相同对象的列表?

我的查询正在从存储过程中的管道函数中进行选择

String query = "select * from table(myschema.mypackage.myfunction(input_var))";

更新

我在过程中调用的管道函数返回大约 200 行。出于测试目的,我仅映射了前几列。

我的实体类具有 200 列中前 13 列的列映射。 我调用该函数的查询正在执行 select *,因此,它返回所有 200 列并映射前 13 列。我认为这是一个可能的问题,但我只是用新的测试进行了尝试我创建了一个类,并从常规表中执行 select * 到只有 2 个映射列的实体中。没有问题。它返回一个不同对象的列表。

我的结论是,一定有什么东西阻止 Hibernate 迭代我的管道函数的结果集。它返回正确的行数,但它卡在第一行,只是一遍又一遍地创建该对象。

这个问题似乎与我的列映射没有任何关系

最佳答案

解决了。

事实证明,我只是没有注意并过度思考我所做的事情。

我在实体类中的一个列上添加了 @Id 注释,但结果并不明显。当我检查我的工作时,我只关注返回的列表的大小。

在右列上修复我的 @Id 后,它现在返回不同对象的完整列表。

关于java - JPA createNativeQuery 未映射到实体类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45087271/

相关文章:

java - 在Scala中,给定一个子类,如何使用反射检查它是否覆盖其父接口(interface)(在Java中定义)的默认方法?

hibernate - 约束验证失败后,内存中的对象无效

java - 自定义 bean 验证约束和 persist() 验证

hibernate - 一对多映射创建 3 个表

java - 接口(interface)的变量在JAVA中是如何工作的,如何调用接口(interface)的方法?

java - 如何使用 iText 7 检查现有文档的 PDF/A 一致性?

java - 服务器和线程模型

java - 如何通过匹配正则表达式提取所有子字符串?

JavaEE : Does EntityManager get method changing state in DB

java - 将一个实体持久化到另一个实体之后 ~ Netbeans、J2E、bean、EntityManager