Java 在JPA中对单个列使用DISTINCT关键字
我正在从一个数据库中读取一些非常不规范的值(我无法控制)。该调用检索大学部门的公告,如果用户在多个部门(这是可能的),那么这些用户多次返回相同的结果。但是,有些部门可能有不同的公告,而有些部门则有相同的公告 我有没有办法在JPA中的各个列上使用DISTINCT关键字?这是我目前查询的内容:Java 在JPA中对单个列使用DISTINCT关键字,java,hibernate,jpa,jpa-2.0,jpql,Java,Hibernate,Jpa,Jpa 2.0,Jpql,我正在从一个数据库中读取一些非常不规范的值(我无法控制)。该调用检索大学部门的公告,如果用户在多个部门(这是可能的),那么这些用户多次返回相同的结果。但是,有些部门可能有不同的公告,而有些部门则有相同的公告 我有没有办法在JPA中的各个列上使用DISTINCT关键字?这是我目前查询的内容: String jpql = "SELECT DISTINCT annoucement FROM Announcment announcement " + "WHERE (ann
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);
String jpql=“从公告公告中选择不同的公告”
+“其中(announcement.date=:now)”
+“AND announcement.approved=true和(:departmentId)”中的announcement.departmentId”;
TypedQuery query=entityManager.createQuery(jpql,
公告(课堂),;
setParameter(“现在”,新日期());
query.setParameter(“部门ID”,部门ID);
departmentID值可能不同,但公告、日期等都相同。此查询返回具有重复值的公告 我有两种方法来解决你的问题:
希望它能有所帮助在我看来,更好的方法是返回一个只包含您感兴趣的列的更具体的对象。另见以下答案: 根据您的示例,您可以仅使用感兴趣的列创建新对象:
SELECT DISTINCT new com.mypackage.MyInterestingAnnouncement(annoucement.x, annoucement.y, annoucement.z) FROM Announcment annoucement
你知道你偶然使用的JPA版本吗?Hibernate 3.6.6和Hibernate-JPA-2.0-api-1.0.1.Final.jarIt花了我一段时间,但我回去用建议2解决了这个问题。谢谢