我有一个名为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
数据库。我对此很陌生。任何建议,将不胜感激。谢谢。
基本上,我在表中有许多
value
和key
对siteId
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/