如何通过JPA检索具有已过滤子项的对象

时间:2012-02-10 15:19:34

标签: java hibernate spring jpa

我有一个特定的问题,我似乎无法找到答案。我目前正在使用Hibernate JPA在Java Spring MVC环境中工作。

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

Form entity with
@OneToMany
List<Page> pages;

Page entity with
@OneToMany
List<Question> questions;

Question entity with
String status;

其中一些问题的状态为 PRODUCTION ARCHIVED 。很简单,对吧?

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

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

我将如何做到这一点?

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

2 个答案:

答案 0 :(得分:0)

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

@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;

和jpa;

@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();
    }

答案 1 :(得分:0)

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

这里的主题很少写:http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/#entity-hibspec-collection