[英]How to use Hibernate stored procedure with setResultTransformer and scalar
[英]How to use hibernate stored procedure query with result set transformer
這就是我調用 sql 服務器存儲過程的方式
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 class
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;
}
}
但它沒有轉換結果,它給出了 object 數組的列表
我怎樣才能正確地將 map object 陣列轉換為 pojo class?
我應該通過運行循環手動將 object 數組轉換為 pojo 嗎?
我不是這個問題的專家,但EntityManager.createStoredProdecureQuery
有第二個參數用於指定返回類型。 當您像下面這樣更改調用時會發生什么(同時注釋您設置 ResultTransformer 的行)?:
StoredProcedureQuery query = entityManager.createStoredProcedureQuery("Sp_Tab_GetCollectionInvoice", CollectionItem.class);
如果上述解決方案不起作用,我懷疑從存儲過程返回的列與所需的 POJO class 成員不匹配。 您可以使用<sql-result-set-mapping>
或 map 的相應注釋將您的結果集寫入 class 成員的映射。 據我所知,Hibernate 的查詢接口還具有以編程方式處理此映射的方法。 您可能需要檢查addRoot()
和addProperty()
方法。
注意:我剛剛注意到您的CollectionItem
class 沒有用@Entity
注釋。 我不確定上述解決方案是否適用於這種情況。 如果您不想添加@Entity
並使用結果轉換器,我認為您的CollectionItem
class 需要一個沒有 arguments 的構造函數。 要使 bean 轉換器工作,Hibernate 要求 class 要么沒有構造函數,要么沒有公共的無參數構造函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.