Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java QueryDSL谓词SetPath.any具有多个条件_Java_Spring Data Jpa_Querydsl - Fatal编程技术网

Java QueryDSL谓词SetPath.any具有多个条件

Java QueryDSL谓词SetPath.any具有多个条件,java,spring-data-jpa,querydsl,Java,Spring Data Jpa,Querydsl,我有一个简单的实体与一对多的关系 @Entity // and other @ stuff public class Member { @Id private Long id; private String name; private List<Program> programs; ... } @Entity public class Program { @Id private Long id; private Long programName

我有一个简单的实体与一对多的关系

@Entity // and other @ stuff
public class Member {
  @Id
  private Long id;
  private String name;
  private List<Program> programs;
  ...
}

@Entity
public class Program {
   @Id
   private Long id;
   private Long programName;
   private ProgramType programType;
   private Long programCost;
   ...
}
带JPA的

memberRepository.findAll(predicate);
现在的问题是这两个查询是独立的。它返回至少一个“FULLTIME”类型的程序或至少一个成本大于1000的程序的所有成员

期望的结果:如果成员至少有一个类型为FULLTIME且成本>1000的程序,则返回成员。

在这里获得了一些帮助:

基本上,程序上的条件需要在单独的子查询(实例)中


正如@Shahbour所提到的,这在QueryDsl 4.x+上已经不起作用了

我有一个类似的案例(除了我的实体是双向的),我用这个解决了它:

QProgram program = QProgram.program;
QProgram member  = QProgram.member;

Predicate predicate = JPAExpressions
    .selectOne()
    .from(program)
    .where(program.member.id.eq(member.id),
            program.programCost.gt(1000),
            program.programType.eq(ProgramType.FULLTIME))
    )
    .exists();

memberRepository.findAll(predicate);

我认为这个例子对于querydsl 4.x来说已经过时了,在mongodb的情况下如何处理这个问题?jpa代表关系型?我对前两行声明感到困惑,您使用的是不同的示例吗?QProgram没有成员路径?
QProgram program = QProgram.program
JPASubQuery subQuery = new JPASubQuery();
subQuery.from(program)
        .where(program.programType.eq(ProgramType.FULLTIME),
            program.programCost.gt(1000));

Predicate predicate = QMember.member.name.eq("John")
    .and(subQuery.exists());

memberRepository.findAll(predicate);
QProgram program = QProgram.program;
QProgram member  = QProgram.member;

Predicate predicate = JPAExpressions
    .selectOne()
    .from(program)
    .where(program.member.id.eq(member.id),
            program.programCost.gt(1000),
            program.programType.eq(ProgramType.FULLTIME))
    )
    .exists();

memberRepository.findAll(predicate);