使用JPQL查询将查询合并到JPA中的一对多关系

时间:2018-12-24 21:16:25

标签: java hibernate jpa repository jpql

我有一个数据库。一对多的关系。

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

有没有一种方法可以简单地将此方法用于一个查询,而不是遍历通风口并找到每只宠物?

1 个答案:

答案 0 :(得分:1)

正如其他人已经提到的那样,您应该可以选择加入宠物活动。 JPQL如下所示:

SELECT p FROM PetEntity p join p.events e
WHERE e.date =: date