Hibernate查询根据where条件获取所有不同的行

时间:2016-02-18 13:54:55

标签: java hibernate postgresql hql

我有一个名为SiteProperty的POJO如下:

public class SiteProperty
{
    private int sitePropertyId;
    private int siteId;
    private String  key;
    private String  value;
    private String  type;
}

有没有办法为给定的value获取siteId的所有不同值?同样value可能与siteId 0相同。所以基本上查询应该获取siteId 0的所有行,然后如果value存在任何行指定siteId然后必须返回siteId 0的那一行。

我将PostgreSQL数据库用于我的应用程序。

我对此很新。任何建议,将不胜感激。感谢。

Basicaly我在表value 0中有很多keysiteId对,这是默认值。 value的某些值对于同一key可能有不同的siteId。如果对于siteIdvalue对应key则必须返回,否则value对应key siteId应该返回0。返回数据应该是SiteProperty

类型的列表

我在pgAdmin工具中尝试了一个示例SQL查询来测试我得到的结果:

select * from site_property where site_key IN (SELECT DISTINCT site_key FROM site_property where site_id = 0 or site_id = 3) and site_id = 0 or site_id = 3;

此查询只是一个试用版,结果为我提供了siteId的数据组合。

1 个答案:

答案 0 :(得分:1)

您需要将Projection添加到Criteria(这是查询的构建器类):

Criteria criteria = getCurrentSession().createCritiera(SiteProperty.class);
criteria.add(Projections.distinct(Projections.property("value")));
criteria.add(Restrictions.eq("siteId", 0));
List<String> resultList = critiera.list();