gpt4 book ai didi

java - 如何使用带有结果集转换器的 Hibernate 存储过程查询

转载 作者:行者123 更新时间:2023-12-01 22:24:29 30 4
gpt4 key购买 nike

这就是我调用 sql server 存储过程的方式

public Response<List<CollectionItem>> getCollectionList(int customerId) {
StoredProcedureQuery query = entityManager.createStoredProcedureQuery("Sp_Tab_GetCollectionInvoice");
query.registerStoredProcedureParameter("CustomeriD", int.class, ParameterMode.IN);
query.registerStoredProcedureParameter("Ccode", int.class, ParameterMode.IN);


query.setParameter("CustomeriD", customerId);
query.setParameter("Ccode", 1);

List<CollectionItem> resultList = query.unwrap(Query.class)
.setResultTransformer(Transformers.aliasToBean(CollectionItem.class)).getResultList();

return new ResponseUtil().createResponse(resultList);

}

这是pojo类

public class CollectionItem {

public long ID;
public String TransType;
public long Invno;
public String TDate;
public double Amount;


public CollectionItem(long ID, String TransType, long Invno, String TDate, double Amount) {
this.ID = ID;
this.TransType = TransType;
this.Invno = Invno;
this.TDate = TDate;
this.Amount = Amount;
}
}

但它并没有转换结果,而是给出了对象数组的列表

如何正确地将对象数组映射到 pojo 类?

我应该通过运行循环手动将对象数组转换为 pojo 吗?

最佳答案

我不是这个问题的专家,但是,EntityManager.createStoredProdecureQuery有第二个参数用于指定返回类型。当您像下面这样更改调用时会发生什么(还要注释您设置 ResultTransformer 的行)?:

StoredProcedureQuery query = entityManager.createStoredProcedureQuery("Sp_Tab_GetCollectionInvoice", CollectionItem.class);

如果上述解决方案不起作用,我怀疑从存储过程返回的列与所需的 POJO 类成员不匹配。您可以使用 <sql-result-set-mapping> 编写映射或相应的注释将结果集映射到类成员。据我所知,Hibernate 的查询接口(interface)还具有以编程方式处理此映射的方法。您可能想检查addRoot()addProperty()方法。

注意:我刚刚注意到您的 CollectionItem类未用 @Entity 注释。我不确定上述解决方案在这种情况下是否有效。如果您不想添加@Entity并使用结果转换器,我认为你的 CollectionItem类需要一个不带参数的构造函数。为了使 bean 转换器正常工作,Hibernate 要求该类要么没有构造函数,要么有公共(public)无参构造函数。

关于java - 如何使用带有结果集转换器的 Hibernate 存储过程查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58571157/

30 4 0
文章推荐: asp.net - 为什么我收到方法未找到 : 'Void Microsoft.AspNet.Hosting.HostingEnvironment..ctor()' when using MVC from source?
文章推荐: caching - 清除 ccache 或使用多个 ccache 目录的原因
文章推荐: stream - 如何在对象ADODB.Stream中写入空行?
文章推荐: Oracle 收缩空间问题 - alter table 收缩空间由于基于函数的索引而返回错误 ORA-10631。存在任何解决方法吗?