如何在Hibernate中添加Distinct

tjrkku2a  于 8个月前  发布在  其他
关注(0)|答案(8)|浏览(72)

在我的数据库中,我有一个测试表,列:testName,testType有2个不同的测试具有相同的类型,即“SUN”,所以我只想要其中一个,我在我的hibernate / criteria中使用Distinct,如下所示,但它仍然给了我两个与“sun”同名的类型。

Criteria crit = session.createCriteria(Test.class);

    final ResultTransformer trans = new DistinctRootEntityResultTransformer();
    crit.setResultTransformer(trans);
    List rsList = trans.transformList(crit.list());

任何想法可能是什么原因,或任何其他过滤重复的方法。

1cosmwyk

1cosmwyk1#

使用Projections.distinct。

Criteria crit = session.createCriteria(Test.class).setProjection(
    Projections.distinct(Projections.projectionList()
    .add(Projections.property("type"), "type") )
.setResultTransformer(Transformers.aliasToBean(YourBean.class)); 

List lst = crit.list();

其中YourBean.class有一个属性“type”。返回的列表将是List<YourBean>

sg2wtvxw

sg2wtvxw2#

尝试用途:

cr.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);

对我来说效果很好

zd287kbt

zd287kbt3#

我终于找到了获取其他列值的方法:

Criteria criteria = session.createCriteria(Test.class);
ProjectionList projectionList = Projections.projectionList();
ProjectionList projectionList2 = Projections.projectionList();
projectionList2.add(Projections.distinct(projectionList.add(Projections.property("distinctColumn"), "distinctColumn")));
projectionList2.add(Projections.property("col1"), "col1");
projectionList2.add(Projections.property("col2"), "col2");
criteria.setProjection(projectionList2);
criteria.setResultTransformer(Transformers.aliasToBean(Test.class)); 
List list = criteria.list();
flvtvl50

flvtvl504#

尝试用途:

Criteria criteria = 
    session.createCriteria(Test.class).setProjection(
        Projections.distinct(Projections.property("testType")));
List<Test> rsList = criteria.list();
g6baxovj

g6baxovj5#

我也遇到了同样的问题,最后使用Group By投影解决了这个问题,然后添加了我需要的所有列。例如

Criteria query = session.createCriteria(Class.class)
    .setProjection(Projections.projectionList()
        .add(Projections.groupProperty("Col1"), "Col1")
        .add(Projections.groupProperty("Col2"), "Col2"))
    .setResultTransformer(Transformers.aliasToBean(Class.class));
List list =  query.list();
uurv41yg

uurv41yg6#

试试setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY),像这样:

Criteria crit = session.createCriteria(Test.class);
List list = crit.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY).list();
sycxhyv7

sycxhyv77#

投影仅提供标记属性的结果。但是,这给子实体带来了问题。看看我的帖子,看看我面临的真实的问题。
Hibernate: Parent and Child relationship data structure

kzipqqlq

kzipqqlq8#

尝试使用:

criteria.setResultTransformer(DistinctRootEntityResultTransformer.INSTANCE);

它使用默认哈希码在结果中查找匹配项。
谢谢.

相关问题