JPA查询错误地使用了括号,这导致了另一个查询

时间:2018-07-19 13:47:33

标签: java oracle jpa plsql eclipselink

我需要基于到期日期为null的条件从表中检索所有T1对象,并且查询应仅检索三种类型的A,B和C的T16_ID。这将返回正确的结果。     选择*从T1 d     哪里d.T1_T2_ID_FK ='123'     AND d.T1_DATE_EXPIRED为NULL     AND(d.T16_ID如'A'或     d.T16_ID喜欢'B'     或d.T16_ID喜欢'C');

我在应用程序中使用JPA进行对象关系映射,下面是我各自的JPA查询

TypedQuery<T1Docs> query = em.createQuery(
        "**SELECT t FROM T1Docs t WHERE t.t1ID.t2Id = :idNum 
        AND t.t1DateExpired IS NULL 
        AND (t.t16DocType.t16Id LIKE :docType1 OR t.t16DocType.t16Id LIKE :docType2 OR t.t16DocType.t16Id LIKE :docType3**)",T1Docs.class);

query.setParameter("idNum", idNumber);
query.setParameter("docType1", "%" + "A" + "%");
query.setParameter("docType2", "%" + "B" + "%");
query.setParameter("docType3", "%" + "C" + "%");

上面的查询没有返回任何结果,当我调试图表时,我发现查询是按以下方式生成的。

SELECT t0.T1_ID, t0.T1_DATE_CAPTURED, t0.T1_DATE_EXPIRED, t0.T1_T16_ID_FK 
FROM T1_OWNER_DOCUMENT t0, T16_DOC_TYPE t1 WHERE ((((t0.T1_T2_ID_FK = ?) 
AND (t0.T1_DATE_EXPIRED IS NULL)) 
AND ((t1.T16_ID LIKE ? OR t1.T16_ID LIKE ?) 
OR t1.T16_ID LIKE ?)) AND (t1.T16_ID = t0.T1_T16_ID_FK))

由于括号的使用不正确,因此生成的查询变得不正确,并且不返回任何结果。

如果有人知道如何解决JPA查询中的此问题,因为我是JPA的新手,并且难以理解如何将OR与多个检查以及AND和括号一起使用。

0 个答案:

没有答案