Java 如何为多个和/或条件使用标准API对象

Java 如何为多个和/或条件使用标准API对象,java,jpa-2.0,java-ee-6,criteria-api,Java,Jpa 2.0,Java Ee 6,Criteria Api,我有多个和/或条件的问题。这里是这样的情况,我有工作时间实体和user、dateFrom和dateTo字段,还有user实体和organizationUnit字段。我正在构造以下查询以获取日期之间的工作时间,包括那些与这些日期重叠的日期: //仅从给定组织单位获取用户的主要条件 谓词限制=根.get(工作时间\用户).get(用户\组织单元).in((对象[])组织单元); //获取边界日期之间的工作时间的第一个日期条件 谓词DateInRest=builder.greaterThanOrEqu

我有多个和/或条件的问题。这里是这样的情况,我有工作时间实体和user、dateFrom和dateTo字段,还有user实体和organizationUnit字段。我正在构造以下查询以获取日期之间的工作时间,包括那些与这些日期重叠的日期:

//仅从给定组织单位获取用户的主要条件
谓词限制=根.get(工作时间\用户).get(用户\组织单元).in((对象[])组织单元);
//获取边界日期之间的工作时间的第一个日期条件
谓词DateInRest=builder.greaterThanOrEqualTo(root.get(WorkTime\uu.dateFrom),dateFrom);
dateInRestr=builder.and(dateInRestr,builder.lessThanOrEqualTo(root.get(WorkTime_u.dateTo),dateTo));
//获取工作时间重叠边界日期的第二个日期条件
ParameterExpression dateFromParam=builder.parameter(Date.class);
ParameterExpression dateToParam=builder.parameter(Date.class);
谓词DateOutRest=builder.between(dateFromParam,root.get(WorkTime_u.dateFrom),root.get(WorkTime_u.dateTo));
DateOutRest=builder.or(DateOutRest,builder.between(dateToParam,root.get(WorkTime_.dateFrom),root.get(WorkTime_.dateTo));
//或为日期条件
谓词daterest=builder.or(dateinrest,dateoutrest);
//和单位条件
查询。其中(限制、日期限制);
一般来说,它工作正常,但在PostgreSQL中生成的查询如下所示(仅显示条件部分):

和(用户1.ORG.UNIT\u ID在(?,,,,,?,,?)中)

和(worktime0_u0.DATEFROM>=?和worktime0_0.DATETO=?和worktime0_0.DATETO标准API已为您返回有效的SQL。它在需要的地方添加了括号。从我的阅读中,我看不出它会在任何其他RDBMS上引起问题