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