Jpa 2.0 在JPQL中绑定特定参数(一个)

Jpa 2.0 在JPQL中绑定特定参数(一个),jpa-2.0,bind,eclipselink,jpql,Jpa 2.0,Bind,Eclipselink,Jpql,在数据库中,我按列“status”对表进行分区,以获得更好的性能。我的数据库管理员向我询问直接在sql not bind by参数中输入该列的查询值 我可以通过将提示QueryHints.BIND_参数设置为false来更改绑定,但所有参数都在sql中 我是否可以仅在“状态”参数上设置“不绑定” 当BIND_参数=true时的示例结果 SELECT t0.* FROM S_JOBS_ORG_UNIT_CFG t0 WHERE ((((t0.ORG_ID = ?) AND (t0.SCHEDUL

在数据库中,我按列“status”对表进行分区,以获得更好的性能。我的数据库管理员向我询问直接在sql not bind by参数中输入该列的查询值

我可以通过将提示QueryHints.BIND_参数设置为false来更改绑定,但所有参数都在sql中

我是否可以仅在“状态”参数上设置“不绑定”

当BIND_参数=true时的示例结果

SELECT t0.* FROM S_JOBS_ORG_UNIT_CFG t0 
WHERE ((((t0.ORG_ID = ?) AND (t0.SCHEDULER_NEXT_ACTIVATION < SYSDATE)) AND (t0.ACTIVE = ?)) 
AND NOT EXISTS (SELECT ? FROM S_JOBS t1 WHERE (((t1.ORDER_ID = t0.ORDER_ID) AND (t1.ORG_ID = t0.ORG_ID)) AND NOT ((t1.STATUS = ?)))) )
bind => [472100, Y, 1, E]
当BIND_PARAMETERS=false时,返回

SELECT t0.* FROM S_JOBS_ORG_UNIT_CFG t0 
WHERE ((((t0.ORG_ID = 472100) AND (t0.SCHEDULER_NEXT_ACTIVATION < SYSDATE)) AND (t0.ACTIVE = Y)) 
AND NOT EXISTS (SELECT 1 FROM S_JOBS t1 WHERE (((t1.ORDER_ID = t0.ORDER_ID) AND (t1.ORG_ID = t0.ORG_ID)) AND NOT ((t1.STATUS = E)))) )
代码:


我认为最好的办法就是像处理硬编码状态一样,以编程方式构建查询,并手动转义其他参数以避免SQL注入

        Query jobOrgUnitCfgQuery = entityManager.createQuery(
            "SELECT c FROM JobOrgUnitCfg c WHERE c.orgId = :orgId and c.schedulerNextActivation < current_timestamp and c.active = :active and " +
            " not exists (SELECT j  FROM Job j WHERE j.orderId = c.orderId and j.orgId = c.orgId and j.status <> 'E')");

    jobOrgUnitCfgQuery.setParameter("orgId", orgId);
    jobOrgUnitCfgQuery.setParameter("active", Boolean.TRUE);
    return jobOrgUnitCfgQuery.getResultList();