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

我有办法在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值可能不同,但是通知,日期等都相同。此查询返回具有重复值的公告。

最佳答案

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

  • “选择不同的annoucement.x,annoucement.y,annoucement.z
    ...(没有depId)来自...”

    然后构造一个公告。但是你
    丢失了持久对象及其引用。你必须加载它们
    如果需要,可以再次使用您的Dao对象。
  • 在您的Annoucement类中覆盖equals()[hashCode()也是)
    当然,在equals()中,depId应该不在比较之内。得到
    像您一样操作列表,然后将列表转换为Set。你得到了
    “不同”对象

  • 希望能帮助到你

    08-04 19:46