SQLQuery.list()返回相同的条目

时间:2016-02-22 06:57:56

标签: java sql hibernate postgresql orm

在我的java代码中,我写的是这样的。此查询一次又一次地返回相同的记录。但在数据库中我只有一个记录。

String queryString = "select e.business_event_id, e.event_name from events e left outer join subscriptions s on (e.business_event_id = s.business_event_id and s.firm_id = :firmId and s.employee_id = :employeeId) where e.object_id = :objectId and e.category_type =:categoryType and e.is_enabled =:isEnabled";

queryString += " order by e.event_name asc";
final SQLQuery query = session.createSQLQuery(queryString);
query.setParameter("firmId", firmId);
query.setParameter("employeeId", employeeId);
query.setParameter("objectId", objectId);
query.setParameter("categoryType", categoryType);
query.setParameter("isEnabled", "Y");       
final List<Object[]> list = query.list();

这里一次又一次地返回相同的条目。如果有人知道意味着请帮助我解决这个问题。提前谢谢。

1 个答案:

答案 0 :(得分:2)

那是因为您正在加入包含多个子行的父记录。

由于您只需要从父实体端选择记录,您可以简单地使用distinct:

"select distinct e.business_event_id, e.event_name from ..."

更新

正如@a_horse_with_no_name所说,您甚至不需要使用subscriptions进行左连接,因为您没有从该关系中选择任何内容,也不会对其进行过滤。通过删除该连接,您将不会获得任何重复项,并且不再需要distinct