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 子句的解析的主要内容,如果未能解决你的问题,请参考以下文章

如何在 jpql 中为 in-clause 设置集合项?

JPA JPQL IN子句:如何在JPA中使用IN子句?

使用子句 IN 从 sql 转换为 jpql

JPQL IN 子句:Java 数组(或列表、集合...)?

JPQL查询where子句使用IN,如何将参数传递给查询

JPQL订单实体通过将ID传递给IN子句