Java 如何使用hibernate存储过程查询和结果集转换器
这就是我调用sql server存储过程的方式Java 如何使用hibernate存储过程查询和结果集转换器,java,hibernate,spring-boot,stored-procedures,Java,Hibernate,Spring Boot,Stored Procedures,这就是我调用sql server存储过程的方式 public Response<List<CollectionItem>> getCollectionList(int customerId) { StoredProcedureQuery query = entityManager.createStoredProcedureQuery("Sp_Tab_GetCollectionInvoice"); query.registerStoredPr
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类
我应该通过运行循环手动将对象数组转换为pojo吗?我不是这个问题的专家,但是,
EntityManager.createStoredProdecureQuery
有第二个参数用于指定返回类型。当您按如下方式更改调用时会发生什么情况(同时对您设置的ResultTransformer行进行注释)?:
如果上述解决方案不起作用,我怀疑存储过程返回的列与所需的POJO类成员不匹配。可以使用
或相应的注释编写映射,以将结果集映射到类成员。据我记忆所及,Hibernate的查询接口也有以编程方式处理此映射的方法。您可能需要检查addRoot()
和addProperty()
方法
注意:我刚刚注意到您的CollectionItem
类没有用@Entity
注释。我不确定上述解决方案在这种情况下是否有效。如果您不想添加@Entity
并使用结果转换器,我认为您的CollectionItem
类需要一个没有参数的构造函数。为了使bean transformer工作,Hibernate要求该类要么没有构造函数,要么没有公共的无参数构造函数
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;
}
}
StoredProcedureQuery query = entityManager.createStoredProcedureQuery("Sp_Tab_GetCollectionInvoice", CollectionItem.class);