首页 文章

如何使用Hibernate Criteria API从连接表中选择不同的表?

提问于
浏览
1

我正在尝试实现这样的查询:

SELECT DISTINCT C.* FROM A
join B on A.some_id = B.some_id  
join C on B.some_id = C.some_id;

使用Hibernate Criteria API . 我需要为 whole C表有不同的结果,而不仅仅是它的某些列 .

我试着这样做:

Criteria criteria = createCriteria(C.class, "ct")
                .createCriteria("B", "bt")
                .createCriteria("A", "at")
                .//Some restrictions which are applied to all tables

就像那样:

Criteria criteria = createCriteria(A.class, "at")
                .createCriteria("B", "bt")
                .createCriteria("C", "ct")
                .//Some restrictions which are applied to all tables

(虽然我看不出有什么不同) . 尝试过广告ResultTransformer:

criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);

试图将所有colums放入ProjectionsList然后:

criteria.setProjection(Projections.distinct(projectionList));

但该投影仅在列表中的第一列添加“distinct”关键字,但不向整个表添加 .

我想要实现的目标是这样的:

criteria.setProjection(Projections.distinct("C.*"));

但我这里只能添加一列,不能在查询中使用通配符 .

任何帮助是极大的赞赏 .

1 回答

  • 0

    您应该从表'C'中选择列,而不是从表'A'中选择,如下所示 .

    SELECT distinct (*) FROM C
    

    它可以用hibernate标准编写如下:

    Criteria criteria = session.createCriteria(C.class);
    criteria  = criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
    ResultTransformer rt = new DistinctRootEntityResultTransformer();
    List list = rt.transformList(criteria.list());
    

相关问题