>source

다음 코드를 사용하여 Hibernate에 대한 기본 쿼리를 작성 중입니다

   final Query countQuery = entityManager.createNativeQuery( countSql );
    if ( countCriteria.getStartDate() != null ) {
        final String startDate = countCriteria.getStartDate().toString();
        countQuery.setParameter( START_DATE_PARAMETER, startDate );
    }

클래스에서 startDate가 org.joda.time.DateTime 인 곳  그리고 toString()  "2019-05-13"을 반환합니다.

이 쿼리 매개 변수는 프로덕션 환경에서 제대로 작동하며 MS Sql Server에 대해 실행됩니다. (ick!)

이제 유닛 테스트가 HSQLDB에 대해 실행 중입니다. 동일한 값을 제공하고 있습니다.

javax.persistence.PersistenceException: org.hibernate.exception.DataException: data exception: invalid datetime format

쿼리를 실행하려고 할 때

매개 변수의 형식이 정확히 같으므로 문제는 HSQLDB의 날짜 문자열 형식이라고 가정합니다.

그래, 이제 뭐? 이것으로 어떻게 진행합니까? TEMPORAL 등을 취하는 setParameter 형식을 확인했지만 JODA 시간에는 작동하지 않습니다.

나는 이미 네이티브 쿼리를 사용하지 않고 최대 절전 모드 쿼리를 사용하는 것에 대해 내 기술 담당자와 이야기했지만 귀 먹음에 빠졌습니다. DAO에 대한 단위 테스트를 작성하기 위해 기술 리더와 싸울 필요가없는 다른 옵션이 있습니까?

  • 답변 # 1

    글쎄요, 이걸 알아내는 데 얼마나 걸 렸는지 인정합니다.

    LocalDate를 Java 날짜로 변환 한 다음 TemporalType 매개 변수를 설정하는 데 사용했습니다.

       Date date = localDate.toDate();
        countQuery.setParameter(parmName, date, TemporalType.DATE);
    
    

    이것은 잘 작동하는 것 같습니다.

관련 자료

  • 이전 angular - 정의되지 않은 sqlite ionic-v3&SQLite의 'split'속성을 읽을 수 없습니다
  • 다음 sql - 둘 이상의 행을 가져 오는 여러 경우가 포함 된 사례 설명을 작성하는 방법