gpt4 book ai didi

java - JPA createNativeQuery 未映射到实体类

转载 作者:行者123 更新时间:2023-11-30 06:36:44 27 4
gpt4 key购买 nike

我正在尝试使用 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com