我有一个实体场地及其活动:
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?
数据库中可能有数千个事件,因此遍历“事件”以获取当前事件可能不是一个好主意。
这是正确的方法吗?这可行吗?如何拆分当前和过去的事件并进行排序?
谢谢!
最佳答案
当然可以。但是不要使用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();