Hibernate Criteria唯一结果(除键之外的列)

时间:2010-11-22 17:22:57

标签: java hibernate orm

我目前正在使用Hibernate Criteria返回结果列表(过滤各种列值),但是其中一些对象对其中一个属性具有相同的值,我只需要一个“代表”。

例如:我返回了3个车辆对象的列表,其id /主键为123,456,789,制造商代码为:111,111,222。我只想返回一个列表两个对象:123 / 1,189 / 222。

是否有办法在Hibernate Criteria中添加限制,以便在此示例中仅返回制造商代码的唯一(或第一)结果?如果需要任何其他信息/说明,请告诉我。

感谢您的任何建议!

2 个答案:

答案 0 :(得分:1)

如果您使用JPA和Hibernate,您可以使用以下内容:

Query q = em.createQuery("select cat from DomesticCat cat");
q.setMaxResults(1);
List cats = q.getResultList(); //return any one cat from matched rows

现在,只需从列表中获取第一个项目。 顺便说一句,在进行任何进一步的操作之前,请注意NullPointerException并检查列表的大小。

否则,如果您使用没有JPA的Hibernate 。您可以选择以下[ uniqueResult()]:

Query query =session.createQuery("select ao from AccountOwner ao ");
AccountOwner ao=query.uniqueResult();

答案 1 :(得分:1)

最简单的方法是实施适当的ResultTransformer并将其应用于您的查询。

如果你真的希望它在数据库端执行,你需要一些棘手的查询,比如这个(在简称HQL / JPQL中):

SELECT v FROM Vehicle v 
WHERE v.id = 
    (SELECT MIN(sv.id) FROM Vehicle sv WHERE sv.manufacturerCode = v.manufacturerCode)