我正在尝试使用 createNativeQuery 从数据库获取结果集并将其映射到实体对象列表。
当我这样做的时候
List<MyObject> results = this.em.createNativeQuery(query, MyClass.class).getResultList();
我最终得到了一个大小正确的实体对象数组,并正确映射到列,但它们都是相同的对象。对于列表中的每个条目,返回的第一个结果都会重复。
在上图中,您可以看到我取回了数据,如果我检查 ovbjects,它们就会正确映射到我的列。但它们都是同一个对象。
但如果我这样做
List<Object[]> objects = this.em.createNativeQuery(query, Object.class).getResultList();
我得到了一个不同对象的列表,就像它应该的那样。但它们没有映射到我的实体类。
在上图中,您可以看到,当我使用 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/