使用 JPQL 查询在 JPA 中进行查询组合,一对多关系
Making query combining, one to many relationships in JPA with JPQL query
我有一个数据库。具有一对多关系。
pet 1--* event.
我想进行查询,选择在给定日期发生过事件的所有宠物。 (我使用的是 SQL 日期格式)
截至目前,我只想获得所有实体的硬编码日期。
这是我的 PetEntity 中的引用 table
@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;
}
}
有没有一种方法可以简单地将此方法转化为使用一个查询,而不是循环遍历通风口并找到每只宠物?
正如其他人已经提到的,您应该能够 select 宠物加入活动。
JPQL 将如下所示:
SELECT p FROM PetEntity p join p.events e
WHERE e.date =: date
我有一个数据库。具有一对多关系。
pet 1--* event.
我想进行查询,选择在给定日期发生过事件的所有宠物。 (我使用的是 SQL 日期格式)
截至目前,我只想获得所有实体的硬编码日期。
这是我的 PetEntity 中的引用 table
@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;
}
}
有没有一种方法可以简单地将此方法转化为使用一个查询,而不是循环遍历通风口并找到每只宠物?
正如其他人已经提到的,您应该能够 select 宠物加入活动。 JPQL 将如下所示:
SELECT p FROM PetEntity p join p.events e
WHERE e.date =: date