Jpa jpql-选择一对多集合中的某些元素
在我们的领域模型中,我们有Jpa jpql-选择一对多集合中的某些元素,jpa,jpql,Jpa,Jpql,在我们的领域模型中,我们有 @Entity @SequenceGenerator(name = "wordlist_seq", sequenceName = "wordlist_seq") public class QuestionSet { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "wordlist_seq") private Long id; @OneToMany(cascade
@Entity
@SequenceGenerator(name = "wordlist_seq", sequenceName = "wordlist_seq")
public class QuestionSet {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "wordlist_seq")
private Long id;
@OneToMany(cascade = CascadeType.ALL)
private List<Question> questions;
日期是joda时间库中的类型DateTime
,我将其设置为:
query.setParameter("tomorrow", DateTime.now().plusDays(1))
现在这部分起作用了,我只得到了正确匹配的问题集
,但我也得到了所有问题,例如,即使只有一个问题与中的匹配
我的期望值是否过高,或者是否有办法限制问题列表中的实例数量?否。JPA不会返回与数据库实际情况不匹配的实体。如果一个问题集在数据库中有4个问题,那么该问题集实体将有4个问题
如果您只需要一些问题,请选择您感兴趣的问题,然后导航到他们的问题集
或者执行以下查询,将返回匹配的问题集和匹配的问题:
SELECT s, q FROM QuestionSet s JOIN s.questions q WHERE ...
更好的答案是更新getter函数
@Entity
@SequenceGenerator(name = "wordlist_seq", sequenceName = "wordlist_seq")
public class QuestionSet {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "wordlist_seq")
private Long id;
@OneToMany(cascade = CascadeType.ALL)
private List<Question> questions;
public List<Question> getQuestions() {
for(Question q: questions) {
List<Question> filtered = new ArrayList<Question>();
if(q.date < DateTime.now().plusDays(1)) filtered.add(q);
}
return filtered;
}
}
@实体
@SequenceGenerator(name=“wordlist_-seq”,sequenceName=“wordlist_-seq”)
公共类问题集{
@身份证
@GeneratedValue(策略=GenerationType.SEQUENCE,generator=“wordlist_seq”)
私人长id;
@OneToMany(级联=级联类型.ALL)
私人名单问题;
公共列表问题(){
关于(问题q:问题){
List filtered=new ArrayList();
如果(q.date
现在,您可以调用getQuestions函数并获得过滤器值。您可以在getQuestions中添加过滤器局部变量并使用switch case来确定过滤器应该如何工作 关于您给出的查询,它将返回什么类型的对象?列表,其中每个对象[]将包含一个问题集作为第一个元素,一个问题作为第二个元素。谢谢,它可能会派上用场。
@Entity
@SequenceGenerator(name = "wordlist_seq", sequenceName = "wordlist_seq")
public class QuestionSet {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "wordlist_seq")
private Long id;
@OneToMany(cascade = CascadeType.ALL)
private List<Question> questions;
public List<Question> getQuestions() {
for(Question q: questions) {
List<Question> filtered = new ArrayList<Question>();
if(q.date < DateTime.now().plusDays(1)) filtered.add(q);
}
return filtered;
}
}