2014-12-06 3 views
1

우리 데이터베이스에는 필드 이름에 pound sign (#)과 함께 많은 필드가 포함되어 있습니다. JPA에서 기본 쿼리를 사용하려고 시도하면 # as a parameter이 처리됩니다.파운드 로그인 JPA 필드 이름

public List<?> getRecordList(String sql){ 
    Query query = getEntityManager().createNativeQuery(sql); 
    return query.getResultList(); 
} 

List<?> r = getRecordList("SELECT VENDOR.\"ve#\", ITEM.\"item#\" FROM ITEM LEFT JOIN VENDOR ON ITEM.\"itemve#\" = VENDOR.\"ve#\"); 

이것은 우리가 다음 오류가 실행됩니다 :

Caused by: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.DatabaseException 
Internal Exception: java.sql.SQLException: Parameter index out of range (4 > number of parameters, which is 3). 
Error Code: 0 
Call: SELECT VENDOR."ve?, ITEM."item? FROM ITEM LEFT JOIN VENDOR ON ITEM."itemve? = VENDOR."ve? 
+1

여기 해결책은 컬럼 이름의 이름을 바꾸는 것이라고 생각합니다 ... 누가 컬럼 이름에'# '을 사용하는 아이디어를 내놓았습니까? – noone

+0

불행히도 그건 옵션이 아닙니다. 우리는 20 년 이상 된 AS400 데이터베이스를 다루고 있습니다. 이것은 수백 개의 테이블을 가지고있는 문제입니다. 이는 레거시 시스템에서 매우 일반적인 이름 지정 방법입니다. –

+0

왜 네이티브 쿼리 대신 jpql을 사용하지 않습니까? 특별한 이유가 있니? – bhdrk

답변

1

당신이 JPQL를 사용하는 경우가 작동하지만 네이티브 쿼리하지 않습니다 다음은 예입니다.