Java Hibernate条件,不同的关联属性
假设我至少有这两个实体:Java Hibernate条件,不同的关联属性,java,sql,hibernate,criteria,hibernate-criteria,Java,Sql,Hibernate,Criteria,Hibernate Criteria,假设我至少有这两个实体: class Person { String firstname, lastname; Address address; ManyOtherPropertiesAndEntities ...; } class Address { String street; Country country; } 现在,我想查询Person表,只查询住在不同街道上的人 也就是说,忽略住在同一条街上的所有人,只返回其中一人,任意一人 如
class Person {
String firstname, lastname;
Address address;
ManyOtherPropertiesAndEntities ...;
}
class Address {
String street;
Country country;
}
现在,我想查询Person表,只查询住在不同街道上的人
也就是说,忽略住在同一条街上的所有人,只返回其中一人,任意一人
如何执行这样的查询
这是否可能使用标准
Criteria criteria = session.createCriteria(Person.class, "person");
Criteria addressCriteria = criteria.createCriteria("address")
criteria.setProjection(
Projections.distinct(
Projections.projectionList().add(Projections.property("address.street"))
)
);
这真的不管用
我也尝试过这样做:
projectionList.add( Projections.sqlProjection("DISTINCT ON ( address.street ), ... ", columns.toArray(new String[columns.size()]), types.toArray(new Type[types.size()])));
但也没有结果
>>>>>>>>>>>>>>>>>>>编辑在SQL中,您可以这样做:
SELECT p.*
FROM Address a
INNER JOIN Person p ON ...
GROUP BY a.Street
HAVING p.id = MIN(p.id)
此语句为每个不同的街道
从地址
选择具有最小id
值的人员
。您当然可以使用任何其他字段和聚合函数,而不是MIN(p.id)
,这些字段和聚合函数将精确匹配每条街道上的一个人MAX(p.id)
有效,如果一条街上有多个“史密斯”,则MIN(p.lastname)
无效
您能将上述SQL转换为您的条件查询吗?只是一个问题:为什么要使用Hibernate条件?它已弃用,不受支持。顺便说一句,对于这种需求,我建议使用本机查询。@galovics已经有了一个大的条件查询。这只是一个附加选项,我不想在这种情况下重写整个查询生成器。不推荐使用条件查询?现在有什么建议?不要说HQL。@galovics看到了。。。现在的问题是如何将sql投影转换为hibernate标准。建议您使用JPA标准中现在的标准API,而不是hibernate的专有标准API。^^^用编辑更新用编辑更新。基于一个不同的sql查询,可以在这里找到:注意,我知道表和属性已经更改,但这在这里并不重要。
select DISTINCT ON ( tvmux2_.polarization ) * from TvChannelBond this_ inner join TvChannel tvchannel1_ on this_.channel=tvchannel1_.id inner join TvMux tvmux2_ on this_.mux=tvmux2_.id where this_.enabled=true order by tvmux2_.polarization asc limit 100
SELECT p.*
FROM Address a
INNER JOIN Person p ON ...
GROUP BY a.Street
HAVING p.id = MIN(p.id)