복붙노트

[SPRING] Session Factory를 사용하여 Java Hibernate에서 SQL 저장 프로 시저를 실행하는 방법?

SPRING

Session Factory를 사용하여 Java Hibernate에서 SQL 저장 프로 시저를 실행하는 방법?

세션 팩토리를 사용하여 Java 절전 모드에서 저장 프로 시저를 호출 할 수 없습니다.

MS SQL Studio에서 잘 작동하는 결과 세트를 반환하고 5 개의 매개 변수를 사용하는 SQL 프로 시저를 작성했습니다.

EXEC SlaGrid @appID=245,@fromYear=2012,@toYear=2013,@fromMon=1,@toMon=12   --- sql

EXEC SlaGrid @applID=:applID,@fromYear=:fromYear,@toYear=:toYear,@fromMon=:fromMon,@toMon=:toMon  --hibernate

위 쿼리에 대한 매개 변수를 설정 중입니다.

String queryString = "EXEC SlaGrid @applID=:applID,@fromYear=:fromYear,@toYear=:toYear,@fromMon=:fromMon,@toMon=:toMon"

Query query = sessionFactory.getCurrentSession().createSQLQuery(queryString);

//set query parameters here

query.list()    --- giving sql grammer exception

해결법

  1. ==============================

    1.최대 절전 모드 세션에서 callable 문을 사용할 수 있습니다.

    최대 절전 모드 세션에서 callable 문을 사용할 수 있습니다.

    Connection con = getSessionFactory().getCurrentSession().connection();  
    
    /**
    * Amend to include your parameters and proc
    */          
    CallableStatement cs = con.prepareCall( "{ call myprocedure }");
    
    cs.execute();
    
  2. ==============================

    2.SessionFactory를 생성하고 세션을 연다.

    SessionFactory를 생성하고 세션을 연다.

    CallableStatement callableStatement = session.connection().prepareCall("call GetMarketDataCDS(?,?)");
    callableStatement.setString(1,"JPM");
    callableStatement.registerOutParameter(1, OracleTypes.CURSOR);
    callableStatement.execute();
    ResultSet resultSet=(ResultSet) callableStatement.getObject(1);
    

    여기 오라클을 사용하고 내 첫 번째 매개 변수는 IN 매개 변수이고 두 번째는 OUT이지만 여러 행을 반환하는 결과 집합입니다. 마지막 줄에서는 결과 집합에 모든 행을 넣은 다음 행을 반복 할 수 있습니다.

  3. ==============================

    3.간단하게 다음 코드로 해결했습니다 ... CSV로 매개 변수를 전달하십시오. 도움 사람에게 감사드립니다.

    간단하게 다음 코드로 해결했습니다 ... CSV로 매개 변수를 전달하십시오. 도움 사람에게 감사드립니다.

    String queryString = "SlaGrid 245,2012,2013,1,12"
    
    Query query = sessionFactory.getCurrentSession().createSQLQuery(queryString);
    
    query.list();
    

    완벽한 작품 :)

  4. ==============================

    4.이 시도

    이 시도

    Query query = sessionFactory.getCurrentSession().createSQLQuery(
        "CALL SlaGrid(:appID, :fromYear, :toYear, :fromMon, :toMon)")
        .setParameter("appID", 245)
        .setParameter("fromYear", 2012)
        .setParameter("toYear", 2013)
        .setParameter("fromMon", 1)
        .setParameter("toMon", 12);
    
  5. from https://stackoverflow.com/questions/16007881/how-to-execute-a-sql-stored-procedure-from-java-hibernate-using-session-factory by cc-by-sa and MIT license