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?
여기 해결책은 컬럼 이름의 이름을 바꾸는 것이라고 생각합니다 ... 누가 컬럼 이름에'# '을 사용하는 아이디어를 내놓았습니까? – noone
불행히도 그건 옵션이 아닙니다. 우리는 20 년 이상 된 AS400 데이터베이스를 다루고 있습니다. 이것은 수백 개의 테이블을 가지고있는 문제입니다. 이는 레거시 시스템에서 매우 일반적인 이름 지정 방법입니다. –
왜 네이티브 쿼리 대신 jpql을 사용하지 않습니까? 특별한 이유가 있니? – bhdrk