gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 11:29:19 26 4
gpt4 key购买 nike

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

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。我需要整个 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);

尝试将所有列放入 ProjectionsList 中,然后:

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

但是该投影仅将“不同”关键字添加到列表中的第一列,而不是整个表。

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

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

但我只能在此处添加一列,不能像在查询中那样使用通配符。

非常感谢任何帮助。

最佳答案

您应该从表“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());

关于java - 如何使用 Hibernate Criteria API 从连接表中选择不同的表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43979268/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com