JPQL typedquery 中 IN 子句的解析
Posted
技术标签:
【中文标题】JPQL typedquery 中 IN 子句的解析【英文标题】:Parsing of IN-Clause in JPQL typedquery 【发布时间】:2015-07-05 12:07:33 【问题描述】:我正在尝试执行在 JPA 中运行良好但在 Open JPA 中无法运行的查询,你知道吗?
String iNString;
try
String query = "Delete FROM Table1o WHERE o.Pk1 IN('"+ iNString+ "') and o.countryCode = '"+ countryCode+ "'";
entityManager().createQuery(query).executeUpdate();
LOGGER.info("Delete Query-----------------: " + query);
catch( Exception exception )
throw new DataLayerException(exception.getMessage(),exception);
错误:-org.springframework.dao.InvalidDataAccessApiUsageException:否 找到类型“class java.lang.String”的元数据。班级不是 增强。嵌套异常是 org.apache.openjpa.persistence.ArgumentException: No 找到类型“class java.lang.String”的元数据。班级不是 增强。
【问题讨论】:
o.Pk1 是表中的 RAW 字段。 【参考方案1】:EntityManager em = 关系.entityManager(); StringBuilder sbQueryString = new StringBuilder("SELECT o FROM table AS o WHERE 1 = 1"); if (StringUtils.isNotEmpty(DTO.getNameEng())) sbQueryString.append(" AND LOWER (o.NameEng) LIKE :_NAME_ENG");
sbQueryString.append(" order by o.relationshipNameEng");
TypedQuery<Relationship> q = em.createQuery(sbQueryString.toString(), User.class);
if (StringUtils.isNotEmpty(DTO.getRelationshipNameEng()))
q.setParameter("_NAME_ENG", "%" + DTO.getNameEng().toLowerCase() + "%");
【讨论】:
以上是关于JPQL typedquery 中 IN 子句的解析的主要内容,如果未能解决你的问题,请参考以下文章