簡體   English   中英

迭代從休眠引用游標返回的對象列表

[英]iterating the list of objects returned from hibernate ref cursor

我有一個來自 hibernate 的存儲過程調用,如下所示。 引用游標結果不是實體。 結果集將是對象列表,如 firstName、lastName、middleName、info1、info2、address1、address2。

query = em.createStoredProcedureQuery("TEST.VIEW_REPORT")
            .registerStoredProcedureParameter("iErr", BigDecimal.class,ParameterMode.OUT)
            .registerStoredProcedureParameter("vErrMsg", String.class,ParameterMode.OUT)
            .registerStoredProcedureParameter("reportId", BigDecimal.class,ParameterMode.IN)
            .registerStoredProcedureParameter("subReportId", BigDecimal.class,ParameterMode.IN)
            .registerStoredProcedureParameter("studentId", BigDecimal.class,ParameterMode.IN)
            .registerStoredProcedureParameter("studentName", String.class,ParameterMode.IN)
            .registerStoredProcedureParameter("reportCur", void.class, ParameterMode.REF_CURSOR)
            .registerStoredProcedureParameter("headerCur", void.class, ParameterMode.OUT);

List<Object> reportResults = query.getResultList();
for(int i=0; i<reportResults.size(); i++){
     Object obj = reportResults.get(i);
     System.out.println("----"+obj.toString());
}

這里 println 給出了 '[Ljava.lang.Object;@7faa080c' 這又是一個帶有 firstName、lastName、middleName 的對象。

如何在 for 循環中迭代這個 listObject? 獲取值的有效方法是什么?

更新:游標的輸出將是此查詢的返回值列表,例如 32 行。

select
            pa.first_name as first_name,
            pa.last_name as last_name,
            pa.MIDDLE_INITIAL as middle_name,
            bi.info1 as info1,
            bi.info2 as info2,
            bi.address1 as address1,
            bi.address2 as address2
        from
            studentInfo pa

您應該創建一個表示存儲過程返回的數據的 POJO,並在createStoredProcedureQuery("TEST.VIEW_REPORT", ReportPojo.class)提供此類。

然后query.getResultList()將返回一個您可以使用的類型化結果。

query = em.createStoredProcedureQuery("TEST.VIEW_REPORT", ReportPojo.class)
            .registerStoredProcedureParameter("iErr", BigDecimal.class,ParameterMode.OUT)
            .registerStoredProcedureParameter("vErrMsg", String.class,ParameterMode.OUT)
            .registerStoredProcedureParameter("reportId", BigDecimal.class,ParameterMode.IN)
            .registerStoredProcedureParameter("subReportId", BigDecimal.class,ParameterMode.IN)
            .registerStoredProcedureParameter("studentId", BigDecimal.class,ParameterMode.IN)
            .registerStoredProcedureParameter("studentName", String.class,ParameterMode.IN)
            .registerStoredProcedureParameter("reportCur", void.class, ParameterMode.REF_CURSOR)
            .registerStoredProcedureParameter("headerCur", void.class, ParameterMode.REF_CURSOR);

List<ReportPojo> reportResults = query.getResultList();
reportResults.forEach(System.out::println);
class ReportPojo {
    private String firstName;
    private String lastName;
    private String middleInitial;
    private String info1;
    private String info2;
    private String address1;
    private String address2;
// getters/setters/toString

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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