我需要基于到期日期为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和括号一起使用。