2013-02-20 2 views
3

현재 프로젝트에서 long-matching-prefix 유형의 쿼리가 필요하지만 기껏해야 bigint . 우리는 우리가 ? 2와? 3? 1 날짜가 2 일 열 사이에있는 매개 변수와 일치 열 DC에서 가장 긴 번호를 찾으려면 아래의 스 니펫에서 솔루션 함께했다 . 3.6.10 Hibernate QueryException : '모든 명명 된 매개 변수가 설정되지 않았습니다.'- :: int

  • 하이버 네이트 JPA가 여기에 봄 3.2.1
  • 1.0.1

  • 가 소스가

    • Postresql 8.4
    • 최대 절전 모드 : 여기

      는 관련 종속성이 있습니다 :

      ... 
      String query_string = "SELECT * FROM numberlist WHERE " + 
            "?1 BETWEEN init_date AND COALESCE(end_date,'2999-12-31') " + 
            "AND dc IN " + 
            "(select ?2/(10^i)::int8 from generate_series(0,floor(log(?3))::int) i) " + 
            "ORDER BY dc DESC LIMIT 1"; 
      
      Query query = emf.createEntityManager().createNativeQuery(query_string, MyNumber.class); 
          query.setParameter(1, valid_date); 
          query.setParameter(2, num); 
          query.setParameter(3, num); 
      
      MyNumber result = (MyNumber)query.getSingleResult(); 
      ... 
      

      우리는 다음과 같은 예외가 점점 :

      Caused by: org.hibernate.QueryException: Not all named parameters have been set: [:int8, :int] 
      

      을 우리는 문제가 최대 절전 모드가 을 복용 생각 :을 int로 : INT8 매개 변수로하지만 해결책을 찾을 수 없습니다.

      도움 주셔서 감사합니다. 내 댓글에 기록 된대로 위, 내가 사용 결국

      query.setParameter(1, valid_date); 
      
  • 답변

    0

    :이 방법으로

    public class LegacyDao extends JdbcDaoSupport 
    

    query.setParameter(":int8", valid_date); 
    

    대신 :

    1

    당신이 사용하려고 했나 나는 Hibernate가 사용하고 있던 DataSource를 재사용 할 수 있었다.

    +0

    안녕하세요, _public 클래스로 끝났습니다. LegacyDao가 JdbcDaoSupport_를 확장하므로 최대 절전 모드가 사용중인 DataSource를 다시 사용하므로 작동합니다. – Taka

    2

    (select ?2/(10^i)::int8CAST((select ?2/(10^i) AS INT8)으로 다시 쓸 수 있습니다.
    일반적으로 모든 유형 캐스트는 <data>::<type>CAST(<data> AS <type>)으로 기록 할 수 있습니다.
    이 양식은 동일하며 동일한 결과를 제공합니다.

    관련 문제