针对多个限制的Hibernate分离条件

针对多个限制的Hibernate分离条件,hibernate,detachedcriteria,Hibernate,Detachedcriteria,我正在尝试获取其状态仍显示为非活动的用户列表并对其进行处理。 此用户嵌入了UserDetails、UserActivity实体。所有实体表的“状态”列的值均为“不活动” 现在我使用分离的标准作为 detachedcriteria.for class(User.class).add(Restrictions. Eq("status","Inactive").setresulttransformer(criteria.distinct_element) 这将用户对象及其嵌入实体作为单个用户

我正在尝试获取其状态仍显示为非活动的用户列表并对其进行处理。 此用户嵌入了UserDetails、UserActivity实体。所有实体表的“状态”列的值均为“不活动”

现在我使用分离的标准作为

detachedcriteria.for class(User.class).add(Restrictions. 
   Eq("status","Inactive").setresulttransformer(criteria.distinct_element)
这将用户对象及其嵌入实体作为单个用户对象提供给我

但现在,我必须调整查询以确保嵌入式类的状态也是非活动的。所以我选择了命名查询,因为我不知道如何在一个分离的条件中为不同的实体添加多个限制

在命名查询中,我连接所有表以获取数据。我能够得到数据,但它返回的对象数组列表。其中,此列表的第一个对象包含以下实体的数组

命名查询:

from User us, UserDetail ud, UserActivity uc where us.id=ud.id and us.id=uc 
  .id and us.status=ud.status and us.status=uc.status and us.status='Inactive'

List<User>=query.list ();

Object ob=lst.get(0);

Where ob contains [User(),UserDetail(),UserActivity ()].
来自用户us、用户详细信息ud、用户活动uc,其中us.id=ud.id和us.id=uc
.id和us.status=ud.status和us.status=uc.status和us.status='Inactive'
List=query.List();
对象ob=lst.get(0);
其中ob包含[User()、UserDetail()、UserActivity()]。
  • 我们可以在一个分离的标准中为不同的实体纠正多个限制吗

  • 当我进入detachedcriteria时,我们是否可以有一个命名查询,该查询将返回单个用户对象以及其中的嵌入实体?(这样我就可以直接执行
    User.getUserDetail()


  • 您可以为此使用别名:

    假设您有像这样的用户类

    class User {
        ...
        private UserDetail userDetail;
        private UserActivity userActivity;
        ...
    }
    
    不能直接对对象的二级属性设置限制。通过使用
    .createAlias()
    方法,您可以向生成的SQL添加
    JOIN
    语句,并使用别名添加限制

    DetachedCriteria dc = DetachedCriteria
        .forClass(User.class , "u")
        .add(Restrictions.Eq("u.status","Inactive")
        .createAlias("u.userDetail", "ud")
        .add(Restrictions.Eq("ud.status","Inactive")
        .createAlias("u.userActivity", "ua")
        .add(Restrictions.Eq("ua.status","Inactive")
        .setResultTransformer(Criteria.DISTINCT_ROOT_ELEMENT);
    

    嗨,高坤,谢谢你的回复。我将尝试你描述的方法。但有一个问题,如果我的一个属性是list,如果它是一对多的关系呢。比如:类用户{…private UserDetail UserDetail;private List userActivity;..}。。这里一个用户有许多活动..createAlias(“u.userActivity”,“ua”)和.createAlias(“u.userActivities”,“ua”)都可以工作。还可以将JoinType定义为第三个参数。