2017-10-24 8 views
0

최근에 Spring 4.3.9에서 최대 절전 모드 3.5에서 4.3.11로 업그레이드했다. 업그레이드하기 전에 모든 것이 잘 동작했다. 업그레이드 후에이 오류가 발생합니다.Hibernate 4는 네이티브 SQL 질의를위한 null 객체의리스트를 리턴한다.

환경 : 자바 8 톰캣 7.0.23, 최대 절전 모드 4.3.11, 봄 4.3.9, MSSQL 서버 2008,

최대 절전 모드를 통해 다음과 같은 SQL 쿼리를 실행하는 동안, 우리는 목록에서 올바른 크기의 null 객체 목록을 가져 오지만 객체는 null입니다. 널 objects.I의 결과 목록에서

String sqlQuery="select DISTINCT(HIERARCHY_ID) from BASETYPE_HIERARCHY_MAPPING where BASETYPE_ID IN " 
         + "(select BASETYPE_ID from BASETYPE_GROUP_MAPPING where GROUP_ID IN " 
         + "(select GROUP_ID from USER_GROUP_MAPPING where USER_ID=(select ID from USER where USERID=:userId)))"; 

Query query = session.createSQLQuery(sqlQuery); 
query.setParameter("userId", userId); 
List<String> typeId = query.list(); 

이 (솔루션 매핑 실수) HQL에 대한 문제의 유사한 유형을 발견 :

select DISTINCT(HIERARCHY_ID) from BASETYPE_HIERARCHY_MAPPING 
where BASETYPE_ID IN (select BASETYPE_ID from BASETYPE_GROUP_MAPPING 
where GROUP_ID IN (select GROUP_ID from USER_GROUP_MAPPING where USER_ID like(select ID from USER where USERID='7'))) 

자바 코드 : 쿼리

하지만 그것의 간단한 SQL 쿼리.

유사한 문제 참조 링크 :받지에서 당신이 열이 여기에 매핑하기 때문에 Hibernate returns list of nulls although executed SQL returns values

답변

0

당신은 널지고있다. 여기서이 단계를 수행 할 수 있습니다. 이

public class ABC{ 

    private long id; 
} 

처럼 HIERARCHY_ID을 얻을 수있는 클래스를 확인하고이

@Query("SELECT new com.abc.abc.ABC (t.id) from table t") 

같은 쿼리를 작성 이렇게하면 ABC 개체의 목록을 제공하고 나는 그것이 작동 것이라 생각합니다.

+0

당신은 SQL 대신 HQL을 사용한다고 말하고 있지만, 최대 절전 모드에서는 SQL 쿼리를 실행하고 목록 결과를 얻을 수 있습니다. –

0

쿼리에서 열의 반환 유형을 지정하여 hibernate 스칼라를 사용하여 문제를 해결했습니다.

addScalar는()

에 따라 변화 문제를 해결하기 위해 자바 코드에서 수행된다.

String sqlQuery="select DISTINCT(HIERARCHY_ID) from BASETYPE_HIERARCHY_MAPPING where BASETYPE_ID IN " 
         + "(select BASETYPE_ID from BASETYPE_GROUP_MAPPING where GROUP_ID IN " 
         + "(select GROUP_ID from USER_GROUP_MAPPING where USER_ID=(select ID from USER where USERID=:userId)))"; 

Query query = session.createSQLQuery(sqlQuery).addScalar("HIERARCHY_ID", StringType.INSTANCE); 
query.setParameter("userId", userId); 
List<String> typeId = query.list(); 

그러나 SQL 쿼리의 우리의 프로젝트를 많이에서

사용, 그래서 모든 queires에서 최대 절전 모드 4에서의 필수 더 나은 대신 addScalar의 soluation() 또는 왜 변경해야합니다, 그것은 3.5에서 잘 작동했다