0

我有两节课;

 User {
        private String name;
        private Set<Role> roles;
    }

Role {
    private String name;
    private boolean disabled;
}

在我的应用程序中,用户可以获得分配的多个角色,这些角色存储在角色集中。可能会发生角色被禁用并且用户不再可以查看的情况。

我正在使用 Hibernate Criteria 来查询表;

Criteria criteria = session.createCriteria(User.class);
criteria.add(Restrictions.eq("name", name));

有没有办法查询用户表并使用此查询从他/她的角色集中“隐藏”禁用的角色,我应该在运行查询后处理这个吗?

4

3 回答 3

1

您可以使用 HQL执行内部联接。

高品质

SELECT u FROM User u JOIN u.roles r WHERE r.disabled = 0

这假设您已设置boolean映射到类型的列Number(1)

在默认情况下使用 Oracle 数据库时,Hibernate 将布尔数据类型映射到什么?

休眠标准

List users = sess.createCriteria(User.class)
    .createCriteria("roles")
        .add( Restrictions.like("disabled", new Integer(0)))
    .list();
于 2013-02-05T10:38:47.197 回答
1

Simplest way, you can use @Where annotation. It is Hibernate proprietary annotation and I don't like proprietary annotations, but it fits your case.

Sorry for the old links, but in the latest manual of Hibernate I don't find a good explanation for this annotation, though it is still valid.

于 2013-02-05T10:47:29.517 回答
0
  1. 您应该通过将角色的访问器方法实现到User类中来封装它。此方法将仅返回启用的角色。这解决了隐藏禁用角色的问题。

  2. 其他问题是从所有用户的角色列表中禁用角色后删除角色。您可以按以下方式进行。创建负责用户/角色相关操作的特殊服务/经理。实现执行disableRole()以下操作的方法:禁用角色,然后遍历所有用户并从其角色列表中删除角色。但要小心:在这种情况下,角色一旦再次启用就不会自动出现在用户列表中。所以,我只会实现第一个想法(见上文)。

于 2013-02-05T10:41:30.020 回答