gpt4 book ai didi

java - Java 中的 Hibernate DetachedCriteria 多个结果

转载 作者:太空宇宙 更新时间:2023-11-04 07:52:54 24 4
gpt4 key购买 nike

这是我的 SQL 语句。

SELECT USER_PROFILE.FIRST_NAME, USER_PROFILE.LAST_NAME, USER_PROFILE.USER_TYPE
FROM USER_PROFILE
INNER JOIN USER_LOGIN_STATUS
ON USER_PROFILE.USER_ID=USER_LOGIN_STATUS.USER_ID
ORDER BY USER_PROFILE.FIRST_NAME

我正在尝试执行下面的代码,我认为该代码相当于 hibernate DetachedCriteria,并且预计结果只有两个数据。

DetachedCriteria dc = getDetachedCriteria();
DetachedCriteria userLoginCriteria = DetachedCriteria.forClass(UserLoginStatus.class);
userLoginCriteria.setProjection(Projections.distinct(Projections.property("userId")));
dc.add(Subqueries.propertyIn(UserField.id.name(), userLoginCriteria));

DetachedCriteria profileCriteria = dc.createCriteria("profile");
profileCriteria.addOrder(Order.asc("firstName"));
return getAll(dc, pageSetting);

但不幸的是,这是意外的结果:我有多个数据结果。

名称 |输入 |

  1. 本·琼斯 |用户|
  2. 本·琼斯 |用户|
  3. 汤姆·霍默 |访客|
  4. 汤姆·霍默 |访客|

有人知道确切等效的 DetachedCriteria 或解决方案吗?

最佳答案

首先,您的 SQL 看起来不正确。它返回多行的原因是您要加入 USER_LOGIN_STATUS 表,该表的每个 USER_PROFILE 可能有多行。由于您没有USER_LOGIN_STATUS 表中选择任何字段,因此您无法了解为什么存在多行。您为什么要加入这张 table ?

其次,您正在执行的分离条件与您提供的 SQL 并不等同,因为您正在执行不在 SQL 中的子查询。

您不需要此子选择,并且由于我不明白您为什么要进行联接,因此我将假设一些要点来为您提供以下示例:

DetachedCriteria dc = getDetachedCriteria();
dc.createAlias("userLoginStatus", "uls");
dc.add(Projections.property("firstName"));
dc.add(Projections.property("lastName"));
dc.add(Projections.property("userType"));
dc.addOrder(Order.asc("firstName"));
return getAll(dc, pageSetting);

现在这大致相当,但我假设:

  • 您拥有 UserFieldUserLoginStatus 之间关系的正确映射。
  • getDetachedCriteria() 实际上返回 DetachedCriteria.forClass(UserField.class)

您现在还可以引用 UserLoginStatus 中的字段,如下所示:

dc.add(Projections.property("uls.my_user_login_field"));

同样,如果您整理了查询并且仍然返回多个实体,那么 dinukadev 的答案将发挥作用:

dc.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);

我怀疑这对你不起作用的原因是你的子选择。

抱歉,我无法为您提供更多帮助。

关于java - Java 中的 Hibernate DetachedCriteria 多个结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14133222/

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