出于某种原因,我无法判断,当我尝试使用子查询从 CriteriaQuery 获取列表时出现异常。有人请帮忙!!!这是代码:
public String[] getProductsDistinctBySubQueriesName(String category) {
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<Tuple> criteria = builder.createTupleQuery();
//subquery
Subquery<Integer> subqueries = criteria.subquery(Integer.class);
Root<Productscategory> productCategory = subqueries.from(Productscategory.class);
subqueries.select(productCategory.<Integer>get("productscategoryid"))
.where(builder.equal((productCategory.<String>get("productcatgoryname")), category));
//outerquery
Root<Products> root = criteria.from(Products.class);
criteria.multiselect(root.get(Products_.productname)).distinct(true)
.where(builder.in(root.get("productscategoryid")).value(subqueries));
List<Tuple> tupleResult = em.createQuery(criteria).getResultList(); // the exception is thrown here
String[] arrayProducts = new String[tupleResult.size()];
for (int i = 0; i < tupleResult.size(); i++) {
arrayProducts[i] = (String) tupleResult.get(i).get(0);
}
return arrayProducts;
}
这是例外
内部异常:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在 '.productscategoryid FROM productscategory t1 WHERE (t1.productcatgoryname = 'Pri' at line 1 错误代码:1064 错误代码:1064 调用:SELECT DISTINCT t0.productname FROM products t0 WHERE t0.productscategoryid IN (SELECT t1.productscategoryid.t1.productscategoryid FROM productscategory t1 WHERE (t1.productcatgoryname = ?)) bind => [1 parameter bound] Call: SELECT DISTINCT t0.productname FROM products t0 WHERE t0。 productscategoryid IN (SELECT t1.productscategoryid.t1.productscategoryid FROM productscategory t1 WHERE (t1.productcatgoryname = ?)) bind => [1 参数绑定] 查询:469) 在 com.inventory.service.ProductsServices.getProductsDistinctBySubQueriesName(ProductsServices.java:112) 在 com.inventory.service.ProductsServices.getAllByName(ProductsServices.java:211) 在 com.inventory.server.InventorySocketRequest.getServiceClass(InventorySocketRequest.java :77) at com.inventory.server.InventorySocketRequest.run(InventorySocketRequest.java:44) 原因:异常 [EclipseLink-4002] (Eclipse Persistence Services - 2.5.1.v20130918-f2b9fc5): org.eclipse.persistence.exceptions .DatabaseException 内部异常:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在 '.productscategoryid FROM productscategory t1 WHERE (t1.productcatgoryname = 'Pri' AbstractSession.executeQuery(AbstractSession.java:1775) 在 org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1740) 在 org.eclipse.persistence.internal.jpa.QueryImpl.executeReadQuery(QueryImpl.java: 258)... 5 更多原因:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取正确的语法,以便在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 的 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 的第 1 行的 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 附近的 '.productscategoryid FROM productscategory t1 WHERE (t1.productcatgoryname = 'Pri') 附近使用正确的语法。反射.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java: