存储过程不返回结果集

时间:2016-07-22 13:26:38

标签: java sql hibernate jpa stored-procedures

我正在尝试使用此存储过程获取数据:

create procedure Proc_Member_Statement @Counter int,@TransDate datetime
as
declare @schemeNo int,@MemberNo int

select @schemeNo = SchemeNo,@MemberNo = MemberNo from Members where Counter = @Counter

exec Individualize @schemeNo,@MemberNo,@TransDate,0,0

exec RepMemberCertificate_DBN_One @schemeNo,@MemberNo,@TransDate,0

我的模特课:

    @NamedStoredProcedureQueries(
        {

                @NamedStoredProcedureQuery(
                        name = "getMemberStatement",
                        procedureName = "Proc_Member_Statement",
                        resultClasses = AccountStatement.class,
                        parameters = {
                                @StoredProcedureParameter(
                                        name = "Counter",
                                        mode = ParameterMode.IN,
                                        type = Long.class

                                ),
                                @StoredProcedureParameter(
                                        name = "TransDate",
                                        mode = ParameterMode.IN,
                                        type = Date.class

                                )
                        }
                ),
        }

)
@Entity
public class AccountStatement implements Serializable {

    @Id
    BigDecimal EmpOpBal;

    public BigDecimal getEmpOpBal() {
        return EmpOpBal;
    }

    public void setEmpOpBal(BigDecimal empOpBal) {
        EmpOpBal = empOpBal;
    }

    public BigDecimal getEmprOpBal() {
        return EmprOpBal;
    }

    public void setEmprOpBal(BigDecimal emprOpBal) {
        EmprOpBal = emprOpBal;
    }

    public BigDecimal getEmpCont() {
        return EmpCont;
    }

    public void setEmpCont(BigDecimal empCont) {
        EmpCont = empCont;
    }

    public BigDecimal getEmprCont() {
        return EmprCont;
    }

    public void setEmprCont(BigDecimal emprCont) {
        EmprCont = emprCont;
    }

    public BigDecimal getEmpVolCont() {
        return EmpVolCont;
    }

    public void setEmpVolCont(BigDecimal empVolCont) {
        EmpVolCont = empVolCont;
    }

    public BigDecimal getEmprVolCont() {
        return EmprVolCont;
    }

    public void setEmprVolCont(BigDecimal emprVolCont) {
        EmprVolCont = emprVolCont;
    }

    public BigDecimal getEmpInt() {
        return EmpInt;
    }

    public void setEmpInt(BigDecimal empInt) {
        EmpInt = empInt;
    }

    public BigDecimal getEmprInt() {
        return EmprInt;
    }

    public void setEmprInt(BigDecimal emprInt) {
        EmprInt = emprInt;
    }

    public BigDecimal getClosingBal() {
        return ClosingBal;
    }

    public void setClosingBal(BigDecimal closingBal) {
        ClosingBal = closingBal;
    }

    public BigDecimal getEmpCBal() {
        return EmpCBal;
    }

    public void setEmpCBal(BigDecimal empCBal) {
        EmpCBal = empCBal;
    }

    public BigDecimal getEmprCBal() {
        return EmprCBal;
    }

    public void setEmprCBal(BigDecimal emprCBal) {
        EmprCBal = emprCBal;
    }


    @Id
    BigDecimal EmprOpBal; // Employer Opening Balance
    @Id
    BigDecimal EmpCont; //Reg Employee
    @Id
    BigDecimal EmprCont; //Reg Employer
    @Id
    BigDecimal EmpVolCont; //Employee AVC
    @Id
    BigDecimal EmprVolCont; //Employer AVC
    @Id
    BigDecimal EmpInt; //Employee Interest
    @Id
    BigDecimal EmprInt; //Employer Interest
    @Id
    BigDecimal ClosingBal; //Closing Balance (Total)
    @Id
    BigDecimal EmpCBal; // Employee Closing Balance
    @Id
    BigDecimal EmprCBal; // Employer Closing Balance


}

现在,当我尝试运行存储过程以便从数据库中获取值时,我不断收到此错误:

[java.lang.IllegalStateException:当前CallableStatement ou不是ResultSet,但调用了getResultList]

这是bean类:

public List<AccountStatement> getOpeningBalances(long memberId, Date date) {

        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.MONTH, -3);
        jLogger.i("Calender >>>>> " + cal.getTime());

        StoredProcedureQuery query = this.entityManager.createNamedStoredProcedureQuery("getMemberStatement");
        query.setParameter("Counter", memberId);
        query.setParameter("TransDate", cal.getTime());
        query.execute();
        try {
            jLogger.i("Returned result >>>>>>>>>> " + query.getResultList());
            List<AccountStatement> openingBalances = query.getResultList();
            return openingBalances;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

我做错了什么?

编辑: 以下是我在Microsoft SQL Server Management Studio中运行存储过程时输出的一部分:

Sample Output

我打算使用系统中某些列的数据。 感谢。

1 个答案:

答案 0 :(得分:0)

我还不清楚你期望的结果集来自哪里,我怀疑是在Proc_Member_Statement中调用的一个存储过程。

为了从Proc_Member_Statement中获取结果,您需要将存储过程中的结果集插入到临时表中,然后在Proc_Member_Statement结束时从中选择行。

相关问题