我目前正在使用Hibernate Criteria返回结果列表(过滤各种列值),但是其中一些对象对其中一个属性具有相同的值,我只需要一个“代表”。
例如:我返回了3个车辆对象的列表,其id /主键为123,456,789,制造商代码为:111,111,222。我只想返回一个列表两个对象:123 / 1,189 / 222。
是否有办法在Hibernate Criteria中添加限制,以便在此示例中仅返回制造商代码的唯一(或第一)结果?如果需要任何其他信息/说明,请告诉我。
感谢您的任何建议!
答案 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)