一尘不染

在JPA的各个列上使用DISTINCT关键字

hibernate

我正在从可怕的非标准化(我无法控制)的数据库中读取一些值。该呼叫检索大学部门的公告,并且如果一个用户在多个部门中(可能的话),则这些用户将多次返回相同的结果。但是,有些部门可能有不同的公告,而有些部门却有相同的公告。

有没有办法让我在JPA的各个列上使用DISTINCT关键字?这是我目前用于查询的内容:

String jpql = "SELECT DISTINCT annoucement FROM Announcment announcement "
                + "WHERE (announcement.date <= :now AND announcement.endDate >= :now) "
                + "AND announcement.approved = true AND announcement.departmentId IN (:departmentIDs)";

TypedQuery<Announcement> query = entityManager.createQuery(jpql,
                Announcement.class);
query.setParameter("now", new Date());
query.setParameter("departmentIDs", departmentIDs);

departmentID值可能不同,但是通知,日期等都相同。此查询返回具有重复值的公告。


阅读 2237

收藏
2020-06-20

共1个答案

一尘不染

我提出您问题的两种方法:

  1. “从…中选择不同的annoucement.x,annoucement.y,annoucement.z …(无depId)”

然后构造一个公告。但是您丢失了持久对象及其引用。您必须根据需要通过Dao对象再次加载它们。

  1. 当然,在您的Annoucement类中重写equals()[hashCode()也是],在equals()中,depId应该不在比较之内。像您一样获取列表,然后将列表转换为Set。你有“不同”的对象

希望能帮助到你

2020-06-20