Hibernate分离多个限制的条件

时间:2015-11-29 14:41:01

标签: hibernate detachedcriteria

我正在尝试获取其状态仍显示为非活动状态的用户列表并处理它们。 此用户嵌入了UserDetails,UserActivity实体。所有实体表都具有状态列,其值为“非活动”。

现在我正在使用分离标准,

detachedcriteria.for class(User.class).add(Restrictions. 
   Eq("status","Inactive").setresulttransformer(criteria.distinct_element)

这给了我User对象及其嵌入的实体作为单个User对象。

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

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

命名查询:

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 ()].
  1. 我们是否可以在单个分离标准中为不同实体设置多个限制?

  2. 我可以有一个命名查询,当我进入detachedcriteria时,它会返回一个User对象及其中的嵌入实体吗?(这样我就可以直接执行User.getUserDetail())。

1 个答案:

答案 0 :(得分:0)

您可以使用别名:

假设你有像

这样的用户类
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);