에서 나는 할 노력하고있어이 선택 :JPA, NOT IN 봄 Webservice를 선택하고
JPA/봄 내 시스템에서SELECT c FROM Incident c
WHERE c.incidentID IN
(
SELECT DISTINCT d.incidentID FROM TagIncident d WHERE tagName IN (d.tagName=?1)
AND d.incidentID NOT IN
(SELECT a.incidentID FROM TagIncident a WHERE tagName IN (a.tagName=?2))
)
나는 오류 받고 있어요 :
"HTTP Status 500 - Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessApiUsageException: An exception occurred while creating a query in EntityManager:"
을 구문에서 내가 잘못하고있는 것이 있습니까? 데이터베이스 (HANA)에서 테스트했는데 문제가 없었습니다.
도움 주셔서 감사합니다.
편집 이상의 오류가
내 최신 시도가 있었다 로그 :
SELECT c FROM Incident c WHERE c.incidentID IN
(SELECT DISTINCT d.incidentID FROM TagIncident d WHERE d.tagName IN
(d.tagName=?1) AND d.incidentID NOT IN
(SELECT a.incidentID FROM TagIncident a WHERE a.tagName IN (a.tagName=?2)))
편집
Exception Description: Syntax error parsing [SELECT c FROM Incident c WHERE c.incidentID IN (SELECT DISTINCT d.incidentID FROM TagIncident d WHERE d.tagName IN (d.tagName=?1) AND d.incidentID NOT IN (SELECT a.incidentID FROM TagIncident a WHERE a.tagName IN (a.tagName=?2)))]. [117, 131]
The expression at index {0} is not a valid expression. [215, 229]
The expression at index {0} is not a valid expression.; nested exception is java.lang.IllegalArgumentException: An exception occurred while creating a query in EntityManager: Exception Description: Syntax error parsing [SELECT c FROM Incident c WHERE c.incidentID IN (SELECT DISTINCT d.incidentID FROM TagIncident d WHERE d.tagName IN (d.tagName=?1) AND d.incidentID NOT IN (SELECT a.incidentID FROM TagIncident a WHERE a.tagName IN (a.tagName=?2)))]. [117, 131]
The expression at index {0} is not a valid expression. [215, 229]
The expression at index {0} is not a valid expression.] with root cause Local Exception Stack: Exception [EclipseLink-0] (Eclipse Persistence Services - 2.6.0.v20150309-bf26070): org.eclipse.persistence.exceptions.JPQLException Exception Description: Syntax error parsing [SELECT c FROM Incident c WHERE c.incidentID IN (SELECT DISTINCT d.incidentID FROM TagIncident d WHERE d.tagName IN (d.tagName=?1) AND d.incidentID NOT IN (SELECT a.incidentID FROM TagIncident a WHERE a.tagName IN (a.tagName=?2)))]. [117, 131]
The expression at index {0} is not a valid expression. [215, 229]
The expression at index {0} is not a valid expression.
최신 시도 :
List<String> list_add_tags = new ArrayList<String>();
List<String> list_remove_tags = new ArrayList<String>();
// creating custom sql_query
String sql_query = "SELECT c FROM Incident c WHERE c.incidentID IN (SELECT DISTINCT(d.incidentID) FROM TagIncident d WHERE d.tagName IN (:add_tags) AND d.incidentID NOT IN (SELECT a.incidentID FROM TagIncident a WHERE a.tagName IN (:remove_tags)))";
TypedQuery<Incident> query = em.createQuery(sql_query, Incident.class);
query.setParameter("add_tags", list_add_tags);
query.setParameter("remove_tags", list_remove_tags);
return query.getResultList();
여전히 작동하지 않습니다. = (
ERROR :
You have attempted to set a value of type class java.util.ArrayList for parameter add_tags with expected type of class java.lang.String
사용하는 JPA 제공자 :
JPA 사양은 예에서이 유효한 구문, 이 지원이 있어야하므로, 어떠한 JPA 제공자를 보여? Hibernate, EclipseLink, OpenJPA 또는 잘 알려지지 않은 DataNucleaus, Toplink, ObjectDB 중 하나? Hibernate에서는 4.6.17.5 절의 JPA 스펙에있는 예제와 같이 목록을 할당 할 수 있지만 자신의 말로 보너스 기능으로 지원한다고 생각했습니다. 어쩌면 당신은 매개 변수 주위에 괄호를 제거해야합니까? 공식적인 예는 당신이 그들을 필요로하지 않아야 함을 의미합니다. – coladict
EclipseLink 2.6.0, 목록에서 IN으로부터 괄호를 제거했는데 효과가있었습니다. 어떻게하면 이해할 수 있습니까? 내 JPA 버전을 어떻게 확인합니까? –