我们的数据库包含很多字段名称为pound sign (#)
的字段。如果我们尝试在JPA
中使用原生查询,则会对# as a parameter
进行处理。这是一个例子:
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?
答案 0 :(得分:1)
如果你使用JPQL它可以工作,但原生查询不能。