jpa-将jpql连接查询转换为条件api
我试图转换这个JPQL查询jpa-将jpql连接查询转换为条件api,jpa,jpql,criteria-api,Jpa,Jpql,Criteria Api,我试图转换这个JPQL查询 SELECT s FROM QuestionSet s JOIN s.questions q WHERE q.appointedRepetition.date < :tomorrow 现在来看,我在CriteriaAPI部分中有几乎相同的代码 @Entity @SequenceGenerator(name = "wordlist_seq", sequenceName = "wordlist_seq") public class QuestionSet {
SELECT s FROM QuestionSet s JOIN s.questions q WHERE q.appointedRepetition.date < :tomorrow
现在来看,我在CriteriaAPI部分中有几乎相同的代码
@Entity
@SequenceGenerator(name = "wordlist_seq", sequenceName = "wordlist_seq")
public class QuestionSet {
@OneToMany(cascade = CascadeType.ALL)
private List<Question> questions;
...
}
@Entity
@SequenceGenerator(name = "question_seq", sequenceName = "question_seq")
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public abstract class Question{
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "question_seq")
private Long id;
...
}
@OneToOne(cascade = CascadeType.ALL)
private AppointedRepetition appointedRepetition;
@实体
@SequenceGenerator(name=“wordlist_-seq”,sequenceName=“wordlist_-seq”)
公共类问题集{
@OneToMany(级联=级联类型.ALL)
私人名单问题;
...
}
@实体
@SequenceGenerator(name=“疑问”,sequenceName=“疑问”)
@继承(策略=继承类型。每个类的表)
公共抽象类问题{
@身份证
@GeneratedValue(策略=GenerationType.SEQUENCE,generator=“问题顺序”)
私人长id;
...
}
@OneToOne(级联=级联类型.ALL)
私人任命的请愿书任命的请愿书;
您需要另一个连接,但我不能保证它会起作用,因为实体定义缺失或不完整,并且并非所有关系都如您的注释中所述定义。无论如何,我会试试这个:
Join<Question, AppointedRepetition> repetition = questionJoin.join("appointedRepetition");
Predicate dateCondition = criteriaBuilder.lessThan(repetition.get("date"), tomorrow);
Join repeation=questionJoin.Join(“任命请求”);
谓词dateCondition=criteriaBuilder.lessThan(repeation.get(“日期”),明天);
顺便说一下,我看到你在用乔达的约会时间。我从来没有在JPA CriteriaBuilder中使用过它,所以我不能保证它能正常工作。什么是
任命者申请
?也许它是一个与问题
有多对一关系的实体?许多问题,一个任命的请愿书?在这种情况下,您需要另一个加入,我可以向您展示我添加的代码呈现模型片段,问题集与Question
实例有OneToMany
关系,每个Questions
都与任命者申请有onetomone
关系,任命请求
不了解问题
,它只是单向关系。
@Entity
@SequenceGenerator(name = "wordlist_seq", sequenceName = "wordlist_seq")
public class QuestionSet {
@OneToMany(cascade = CascadeType.ALL)
private List<Question> questions;
...
}
@Entity
@SequenceGenerator(name = "question_seq", sequenceName = "question_seq")
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public abstract class Question{
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "question_seq")
private Long id;
...
}
@OneToOne(cascade = CascadeType.ALL)
private AppointedRepetition appointedRepetition;
Join<Question, AppointedRepetition> repetition = questionJoin.join("appointedRepetition");
Predicate dateCondition = criteriaBuilder.lessThan(repetition.get("date"), tomorrow);