Как получить объект с отфильтрованными дочерними элементами через JPA - PullRequest
0 голосов
/ 10 февраля 2012

У меня есть конкретная проблема, на которую я не могу найти ответ.В настоящее время я работаю в среде Java Spring MVC, используя Hibernate JPA.

В этой упрощенной ситуации можно сказать, что у меня следующая иерархия:

Form entity with
@OneToMany
List<Page> pages;

Page entity with
@OneToMany
List<Question> questions;

Question entity with
String status;

Некоторые из этих вопросов имеютстатус ПРОИЗВОДСТВО или В АРХИВЕ .Достаточно просто, верно?

Теперь я хочу создать запрос JPA, который позволит мне получить объект Form, но содержащий только те объекты Question, которые имеют статус PRODUCTION .

Поэтому, когда я выполняю запрос, у меня появляется объект Form, содержащий страницы с вопросами.Все вопросы - это вопросы, которые находятся в производстве, а не в архиве.

Как мне это сделать?

РЕДАКТИРОВАТЬ: я по ошибке установил отношение @OneToMany в моем примере выше, исправлено.

Ответы [ 2 ]

0 голосов
/ 10 февраля 2012

С Hibernate вы можете использовать @Where для вашей ассоциации.

Здесь очень мало записей по этому вопросу: http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/#entity-hibspec-collection

0 голосов
/ 10 февраля 2012

Когда вы готовите модель вопроса, вы можете добавить:

@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();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...