我有一个名为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数据库。

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

基本上,我在表中有许多valuekeysiteId 0,这是默认值。对于某些value值,相同的key可以有不同的siteId。如果对于siteId,必须返回与value对应的key,否则应返回与value 0的同一key对应的siteId。并且返回数据应该是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的数据组合。

最佳答案

您需要将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();

关于java - hibernate 查询以根据where条件获取所有不同的行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35483370/

10-09 07:27