2017-03-13 1 views
1

Ich habe unter API in CrudRepositoryFederverschluß JPA IN-Klausel nicht funktioniert

public static final String getVendorOrder ="select new com.meha.ps.order.dto.VendorOrder(orderItem.vendorItemId" 
     + ",order.orderId" 
     + ",order.createTime" 
     + ",order.modTime " 
     + ",org.orgId" 
     + ",org.orgType" 
     + ") from Order order inner join order.OrderItem orderItem on order.orderId=orderItem.orderId" 
     + " inner join Org org on org.orgId=orderItem.vendorId" 
     + " where orderItem.vendorItemId in :vendorItemIds"; 

@Query(getVendorOrder) 
List<VendorOrder> findVendorOrder(@Param("vendorItemIds") List<Integer> vendorItemIds); 

Beim Start unter Störung zu erhalten:

Caused by: java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: order near line 1, column 193 [select new com.meha.ps.order.dto.VendorOrder(orderItem.vendorItemId,order.orderId,order.createTime,order.modTime ,org.orgId,org.orgType) from com.meha.ps.order.entities.Order order inner join order.OrderItem orderItem on order.orderId=orderItem.orderId inner join Org org on org.orgId=orderItem.vendorId where orderItem.vendorItemId in :vendorItemIds] 
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1679) ~[hibernate-entitymanager-5.0.11.Final.jar:5.0.11.Final] 
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1602) ~[hibernate-entitymanager-5.0.11.Final.jar:5.0.11.Final] 
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1608) ~[hibernate-entitymanager-5.0.11.Final.jar:5.0.11.Final] 
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:294) ~[hibernate-entitymanager-5.0.11.Final.jar:5.0.11.Final] 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_65] 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_65] 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_65] 
at java.lang.reflect.Method.invoke(Method.java:497) ~[na:1.8.0_65] 
at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:347) ~[spring-orm-4.3.5.RELEASE.jar:4.3.5.RELEASE] 
at com.sun.proxy.$Proxy114.createQuery(Unknown Source) ~[na:na] 
at org.springframework.data.jpa.repository.query.SimpleJpaQuery.validateQuery(SimpleJpaQuery.java:86) ~[spring-data-jpa-1.10.6.RELEASE.jar:na] 
... 95 common frames omitted 

Verursacht durch: org.hibernate.hql.internal.ast.QuerySyntaxException : Unerwartetes Token: Befehl in der Nähe von Zeile 1, Spalte 193 [wähle neuen com.meha.ps.order.dto.VendorOrder (orderItem.vendorItemId, order.orderId, order.createTime, order.modTime, org.orgId, org.orgType) aus com.meha.ps.order.entities.Order order intern join order.OrderItem orderItem auf order.orderId = orderItem.orderId inner join Org org on org.orgId = orderItem.vendorId wobei orderItem.vendorItemId in: vendorItemIds] bei org.hibernate.hql.internal.ast.QuerySyntaxException.convert (QuerySyntaxException.java:74) ~ [hibernate-core-5.0.11.Final.jar : 5.0.11.Final] bei org.hibernate.hql.internal.ast.ErrorCounter.throwQueryException (ErrorCounter.java:91) ~ [Hibernate-Core-5.0.11.Final.jar: 5.0.11.Final] at org.hibernate.hql.internal.ast.QueryTranslatorImpl.parse (QueryTranslatorImpl.java:288) ~ [Hibernate-Core-5.0.11.Final.jar: 5.0.11.Final] bei org.hibernate.hql.internal .ast.QueryTranslatorImpl.doCompile (QueryTranslatorImpl.java:187) ~ [Hibernate-Core-5.0.11.Final.jar: 5.0.11.Final] bei org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile (QueryTranslatorImpl .java: 142) ~ [Hibernate-Core-5.0.11.Final.jar: 5.0.11.Final] bei org.hibernate.engine.qu ery.spi.HQLQueryPlan. (HQLQueryPlan.java:115) ~ [Hibernate-Core-5.0.11.Final.jar: 5.0.11.Final] bei org.hibernate.engine.query.spi.HQLQueryPlan. (HQLQueryPlan. java: 76) ~ [Hibernate-Core-5.0.11.Final.jar: 5.0.11.Final] bei org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan (QueryPlanCache.java:150) ~ [Winterschlaf- core-5.0.11.Final.jar: 5.0.11.Final] bei org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan (AbstractSessionImpl.java:302) ~ [Hibernate-Core-5.0.11.Final.jar: 5.0. 11.Final] bei org.hibernate.internal.AbstractSessionImpl.createQuery (AbstractSessionImpl.java:240) ~ [Hibernate-Core-5.0.11.Final.jar: 5.0.11.Final] bei org.hibernate.internal. SessionImpl.createQuery (SessionImpl.java:1894) ~ [Hibernate-Core-5.0.11.Final.jar: 5.0.11.Final] bei org.hibernate.jpa.spi.AbstractEntityManagerImpl.creat equery (AbstractEntityManagerImpl.java:291) ~ [Hibernate-EntityManager-5.0.11.Final.jar: 5.0.11.Final] ... 102 gemeinsamer Rahmen

weggelassen
+0

fügen Sie die impl dieser drei Einheiten nur die Abbildung von Abhängigkeiten zwischen ihnen sein kann –

+1

Sie sollten kein neues Schlüsselwort in die Abfrage einfügen Entfernen Sie dieses Objekt zur Erstellung von Objekten aus der Abfrage und versuchen Sie es erneut. 'Wählen orderItem.vendorItemId " +", order.orderId " +", order.createTime " +", order.modTime " +", org.orgId " +", org.orgType " +" aus Bestellreihenfolge inner join order.OrderItem orderItem auf order.orderId = orderItem.orderId " +" inner join Org org org.orgId = orderItem.vendorId " +" wo orderItem.vendorItemId in: vendorItemIds' –

+0

@Maciej Kowalski, There ist ein Mapping zwischen Order und OrderItem von oneToMany, aber es gibt keine Zuordnung zwischen Org und OrderItem, aber OrderItem speichert orgId von Org. Können wir Hibernate Query in einem solchen Szenario schreiben? –

Antwort

0

Wenn es keine direkte Zuordnung zwischen einigen der ist Entitäten dann würde ich vorschlagen, den alten Stil verbinden den ganzen Weg (den Rest der Abfrage scheint in Ordnung) mit:

..
select new com.meha.ps.order.dto.VendorOrder(orderItem.vendorItemId" 
     + ",order.orderId" 
     + ",order.createTime" 
     + ",order.modTime " 
     + ",org.orgId" 
     + ",org.orgType" 
     + ") from Order order, OrderItem orderItem, Org org  
      where order.orderId=orderItem.orderId" 
     + " and org.orgId=orderItem.vendorId" 
     + " and orderItem.vendorItemId in :vendorItemIds"; 
+0

Danke Maciej Kowalski, das hat funktioniert .. –

+0

Großartig. Froh, dass ich helfen konnte –

Verwandte Themen