2012-03-18 1 views
2

У меня есть объект Venue с его События:JPA Entity и его пользовательские характеристики

Event { ID, Name, DateTime } 
    Venue { ID, Name, @OneToMany List<Event> events} 

То, что я хотел бы добиться того, чтобы иметь возможность вызывать эти функции в силу (с OpenEntityManagerInView):

customVenue.getId(); // no problem 
    customVenue.getName(); // no problem 
    customVenue.getEvents(); // no problem 
    customVenue.getCurrentEvents(); // hm? 
    customVenue.getPastEvents(); // hm? 

В базе данных могут быть тысячи событий, поэтому повторение «событий» для получения текущих может не быть хорошим идеалом.

Правильно ли это? Это возможно? Как я могу разделить события в текущем и прошлом и заказать их?

Спасибо!

ответ

1

Конечно, это возможно. Но не используя метод customVenue (если у объекта нет ссылки на диспетчер сущностей, что является плохой идеей).

Выполнить запрос:

String jpql = "select event from Venue venue" 
       + " inner join venue.events event" 
       + " where event.date < :now" 
       + " order by event.date asc"; 
List<Event> pastEvents = em.createQuery(jpql, Event.class) 
          .setParameter("now", new Date()) 
          .getResultList(); 
+0

Проблема с этим подходом является то, что я использую отложенной загрузки с OpenEntityManagerInView - и когда у меня есть список из 20 мест, я итерацию по списку непосредственно в окне просмотра и печати их. При таком подходе я должен был бы вызвать запрос базы данных из представления, который разбил бы MVC - это, вероятно, так же плохо, как предоставление EntityManager сущности, или нет? –

+1

Целью контроллера в MVC является подготовка модели для представления. Сделайте это для выполнения соответствующих запросов и подготовьте «Список » для представления. –

+0

Хорошо, я просто подумал, можно ли это сделать простым способом без контроллера. Благодаря! –

Смежные вопросы