在JPA中使用DISTINCT关键字来筛选个别列

4

我正在读取一些来自非常不规范化的数据库中的值(这是我无法控制的)。此调用检索大学部门的公告,并且如果用户在多个部门中(这是可能的),则对于这些用户将多次返回相同的结果。但是,某些部门可能具有不同的通知,而某些部门可能具有相同的通知。

是否有办法在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);

部门ID的取值可能不同,但公告、日期等都是相同的。这个查询返回具有重复值的公告。


你知道你正在使用哪个版本的JPA吗? - Bhushan
Hibernate 3.6.6和hibernate-jpa-2.0-api-1.0.1.Final.jar - acvcu
2个回答

1

我想到两种解决你的问题的方法:

  1. "select distinct annoucement.x, annoucement.y, annoucement.z ...(without depId) from..."

    然后构造一个公告。但是你失去了持久对象及其引用。如果需要,您必须通过Dao对象重新加载它们。

  2. 在Annoucement类中覆盖equals() [hashCode()也是],当然,在equals()中,depId应该不参与比较。像你一样获取列表,然后将列表转换为Set。你得到了“Distinct”对象

希望能有所帮助


我花了一些时间,但是我回来并通过使用建议#2进行了修复。谢谢。 - acvcu

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接