我有一个数据库。一对多的关系。
pet 1--* event.
我想进行查询,选择所有在给定日期发生过事件的宠物。 (我使用的是SQL日期格式)
截至目前,我只想能够获得所有实体,并进行硬编码。
这是我的PetEntity表中的引用
@OneToMany
private List<EventEntity> events = new ArrayList();
和我的EventEntity
@ManyToOne
PetEntity pet;
我使用的模式是使用存储库来处理数据层,然后使用外观来处理任何逻辑(如果有)
到目前为止,我已经做了这样的方法。
public Set<PetEntity> getPetsWithEvents(Date date){
EntityManager em = emf.createEntityManager();
Set<PetEntity> entities = new HashSet<>();
List<EventEntity> eventEntities=
em.createQuery("SELECT e from EventEntity e where e.date =: date", EventEntity.class).setParameter("date", date).getResultList();
for(EventEntity entity: eventEntities){
entities.add(entity.getPet());
}
return entities;
}
}
有没有一种方法可以简单地将此方法用于一个查询,而不是遍历通风口并找到每只宠物?
答案 0 :(得分:1)
正如其他人已经提到的那样,您应该可以选择加入宠物活动。 JPQL如下所示:
SELECT p FROM PetEntity p join p.events e
WHERE e.date =: date