Java 如何通过JPA检索具有筛选子对象的对象

Java 如何通过JPA检索具有筛选子对象的对象,java,hibernate,spring,jpa,Java,Hibernate,Spring,Jpa,我有一个特别的问题,我似乎找不到答案。我目前在一个JavaSpringMVC环境中工作,使用HibernateJPA 在这种情况下,简化后,您可以说我有以下层次结构: Form entity with @OneToMany List<Page> pages; Page entity with @OneToMany List<Question> questions; Question entity with String status; 使用 @独身癖 列表页; 带有

我有一个特别的问题,我似乎找不到答案。我目前在一个JavaSpringMVC环境中工作,使用HibernateJPA

在这种情况下,简化后,您可以说我有以下层次结构:

Form entity with
@OneToMany
List<Page> pages;

Page entity with
@OneToMany
List<Question> questions;

Question entity with
String status;
使用
@独身癖
列表页;
带有
@独身癖
列出问题;
问题实体
字符串状态;
其中一些问题的状态为“生产”或“存档”。很简单,对吧

现在,我想做的是:我想创建一个JPA查询,它允许我检索表单对象,但只包含那些状态为PRODUCTION的Question对象

因此,当我执行查询时,我有一个表单对象,包含带有问题的页面。所有问题都是生产中的问题,没有存档的问题

我该怎么做呢


编辑:我在上面的示例中错误地设置了@OneToMany关系,已修复。

当您准备问题模型时,您可以添加:

@Column(nullable=false)
private String status;
然后是你的实体

Form entity with
@OneToMany
List<Page> pages;

Page entity with
@OneToMany
List<Question> questions = new ArrayList<Question>();

Question entity with
@OneToMany
String status;
使用
@独身癖
列表页;
带有
@独身癖
列出问题=新建ArrayList();
问题实体
@独身癖
字符串状态;
及少年警讯;

@Override
    public List<Form> getFormsByStatus(String status) {
        Query q = em.createQuery("SELECT f FROM Form f where f.status = ?1")
                .setParameter(1,status);
        return q.getResultList();
    }
@覆盖
公共列表getFormsByStatus(字符串状态){
Query q=em.createQuery(“从表格f中选择f,其中f.status=?1”)
.设置参数(1,状态);
返回q.getResultList();
}

使用Hibernate,您可以在关联上使用
@Where

这里很少有关于这个主题的文章: