Hibernate select distinct return 只有 id

Hibernate select distinct return only id

class Cat {
    long id;
    String name;
    int age
}

List<Cat> results = (List<Cat>) session.createCriteria(Cat.class)
    .setProjection( Projections.projectionList()
        .add( Projections.distinct(Projections.property("id")) )
    )
    .list();

它在没有设置投影的情况下工作得很好,但有重复的 id。 当我们添加集合投影时,查询 return only a list if ids(1, 2, 3).

如何更改为 return 猫列表且 id 不重复?

https://hibernate.atlassian.net/browse/HHH-12437

一种选择是对条件对象使用 setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)。但它不是在数据库端实现的——它是通过编程过滤的(在触发数据库查询后,Hibernate 过滤不同的行)。

另一个更好的选择是使用 setResultTransformer(new AliasToBeanResultTransformer(Cat.class)) 并且您需要像上面那样使用具有不同的投影,并且还要对要填充到 Cat 实体中的所有属性进行投影。这在 SQL 查询中使用了不同的关键字,因此过滤发生在数据库中)

您可以通过此 hibernate forum - select distinct entities using Criteria 获取相关讨论的示例和更多信息。