Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate DetachedCriteria java中的多个结果_Java_Hibernate_Detachedcriteria - Fatal编程技术网

Hibernate DetachedCriteria java中的多个结果

Hibernate DetachedCriteria java中的多个结果,java,hibernate,detachedcriteria,Java,Hibernate,Detachedcriteria,这是我的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

这是我的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);
但不幸的是,这是一个意外的结果:我有一个多数据结果

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);
名称|类型|
  • 本·琼斯|用户|
  • 本·琼斯|用户|
  • 汤姆·荷马|客人|
  • 汤姆·荷马|客人|

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

    请尝试在根分离条件上设置结果转换器,如下所示。这将消除重复项

    dc.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);  
    

    请尝试按以下方式在根分离条件上设置结果转换器。这将消除重复项

    dc.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);  
    

    首先,您的SQL看起来不正确。它返回多行的原因是因为您要针对
    USER\u LOGIN\u STATUS
    表进行加入,该表中每个
    USER\u PROFILE
    可能有多行。由于您没有从
    USER\u LOGIN\u STATUS
    表中选择任何字段,因此无法看到为什么有多行。你为什么要加入这张桌子

    其次,您正在执行的分离条件并不等同于您提供的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);
    
    这现在大致相当,但我假设:

    • 对于
      UserField
      UserLoginStatus
      之间的关系,您有正确的映射
    • getDetachedCriteria()
      实际上返回了
      DetachedCriteria.forClass(UserField.class)
    您现在还可以引用
    UserLoginStatus
    中的字段,如下所示:

    dc.add(Projections.property("uls.my_user_login_field"));
    
    同样,如果您对查询进行了排序,但仍然返回多个实体,那么dinukadev的答案将与以下内容一起发挥作用:

    dc.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
    
    我怀疑这对你不起作用的原因是你的子选择


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

    首先,您的SQL看起来不正确。它返回多行的原因是因为您要针对
    USER\u LOGIN\u STATUS
    表进行加入,该表中每个
    USER\u PROFILE
    可能有多行。由于您没有从
    USER\u LOGIN\u STATUS
    表中选择任何字段,因此无法看到为什么有多行。你为什么要加入这张桌子

    其次,您正在执行的分离条件并不等同于您提供的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);
    
    这现在大致相当,但我假设:

    • 对于
      UserField
      UserLoginStatus
      之间的关系,您有正确的映射
    • getDetachedCriteria()
      实际上返回了
      DetachedCriteria.forClass(UserField.class)
    您现在还可以引用
    UserLoginStatus
    中的字段,如下所示:

    dc.add(Projections.property("uls.my_user_login_field"));
    
    同样,如果您对查询进行了排序,但仍然返回多个实体,那么dinukadev的答案将与以下内容一起发挥作用:

    dc.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
    
    我怀疑这对你不起作用的原因是你的子选择


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

    我已经尝试了您的代码,但它不起作用。谢谢你的帮助。谢谢你的帮助。我在这里搜索问题,然后我尝试你的代码。它起作用了!这个问题困扰了我半天。我不知道这对关先生没什么帮助,但对我的有帮助。非常感谢。很高兴它帮了你:)我已经试过你的代码,但它不起作用。谢谢你的帮助。谢谢你的帮助。我在这里搜索问题,然后我尝试你的代码。它起作用了!这个问题困扰了我半天。我不知道这对关先生没什么帮助,但对我的有帮助。非常感谢。很高兴它帮助了您:)为什么您在您提供的SQL中没有子查询,却在分离的条件中执行子查询?噢,我很抱歉。我不熟悉这项技术。我真的不知道如何让它在独立的标准下工作。你能帮我找出如何使用我提供的sql在分离的条件下完成它吗?非常感谢。为什么你在你提供的sql中没有子查询,却在分离的条件下执行子查询?哦,我很抱歉。我不熟悉这项技术。我真的不知道如何让它在独立的标准下工作。你能帮我找出如何使用我提供的sql在分离的条件下完成它吗?非常感谢。非常感谢你这么好。我真的很感激。我很肯定这一款会管用的。:)非常感谢你这么好。我真的很感激。我很肯定这一款会管用的。:)