programing

javax.persistence를 사용할 수 있습니다.Query.getResultList()가 null을 반환하시겠습니까?

javaba 2022. 9. 30. 10:55
반응형

javax.persistence를 사용할 수 있습니다.Query.getResultList()가 null을 반환하시겠습니까?

그렇다면 어떤 상황에서요?

Javadoc 및 JPA 사양에는 아무것도 표시되지 않습니다.

맞아요.JPA 사양에 대해서는 아무것도 기재되어 있지 않습니다.그러나 Java Persistence with Hibernate 2판에는 다음과 같이 기술되어 있습니다.

쿼리 결과가 비어 있으면 null이 반환됩니다.

결과 없이 query.getResultList()를 호출하면 휴지 상태 JPA 구현(Entity Manager)이 늘을 반환합니다.

갱신하다

일부 사용자가 지적한 바와 같이, 최신 버전의 휴지기는 빈 목록을 대신 반환하는 것으로 보입니다.

결과를 찾을 수 없는 경우에도 Eclipselink에 빈 목록이 반환됩니다.

만약 그럴 수 없다고 명세서에 적혀있다면 믿으시겠어요?코드가 다양한 JPA 구현에 대해 실행될 수 있다는 점을 감안하면 모든 구현자가 올바르게 구현될 수 있다고 생각하십니까?

무슨 일이 있어도, 나는 방어적으로 코드화하고 무효를 체크할 것이다.

여기서 중요한 질문은 "null"과 빈 목록을 동의어로 취급해야 한다는 것입니다.이것이 스펙이 도움이 될 만한 부분이고, 그러지 마세요.

내 추측으로는 null return(실제로 발생할 수 있는 경우)은 "쿼리를 이해하지 못했습니다"와 같으며, 빈 목록은 "예, 쿼리를 이해했지만 레코드는 없었습니다"가 될 것입니다.

검색 불가능한 쿼리를 처리하는 코드 경로(예외적인 경우)가 있을 수 있습니다.그 경로로 null return을 지시하는 경향이 있습니다.

Arthur의 투고와는 달리 실제로 일치하는 엔티티가 없는 쿼리를 실행했을 때 null이 아닌 빈 목록이 표시되었습니다.이것은 하이버네이트를 사용하고 있기 때문에 올바른 동작이라고 생각합니다.엔티티 컬렉션을 요구할 때 빈 리스트가 정답입니다.

자세히 보시면org.hibernate.loader.Loader(4.1) 리스트는 항상 processResultSet() 메서드(doc, source) 내에서 초기화됩니다.

protected List processResultSet(...) throws SQLException {
   final List results = new ArrayList();

   handleEmptyCollections( queryParameters.getCollectionKeys(), rs, session );
   ...
   return results;

}

그래서 나는 그것이 지금 무효로 돌아올 것이라고 생각하지 않는다.

물론 자카르타의 CollectionUtils.isNotEmpty를 사용하여 결과 세트를 테스트하는 경우 어느 쪽이든 해당됩니다.

Query.getResultList()대신 빈 목록을 반환합니다.null확인 부탁드립니다.isEmpty()반환된 결과에 대한 정보를 입력하고, 그것이 거짓일 경우 나머지 논리로 계속 진행합니다.

의 실장을 고려하면getResultsList()org.hibernate.ejb.QueryImpl합니다.null

public List getResultList() {
    try {
        return query.list();
    }
    catch (QueryExecutionRequestException he) {
        throw new IllegalStateException(he);
    }
    catch( TypeMismatchException e ) {
        throw new IllegalArgumentException(e);
    }
    catch (HibernateException he) {
        em.throwPersistenceException( he );
        return null;
    }

최대 절전 버전은 3.3.1입니다.GA

언급URL : https://stackoverflow.com/questions/1115480/can-javax-persistence-query-getresultlist-return-null

반응형