簡體   English   中英

如何使用 hibernate 存儲過程查詢與結果集轉換器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM