Java 从集合中隐藏项目

Java 从集合中隐藏项目,java,hibernate,hibernate-criteria,Java,Hibernate,Hibernate Criteria,我有两个班 User { private String name; private Set<Role> roles; } Role { private String name; private boolean disabled; } 是否有方法查询用户表并使用此查询从他/她的角色集中“隐藏”禁用的角色?在我运行查询后是否应处理此问题?您可以使用HQL执行 HQL SELECT u FROM User u JOIN u.ro

我有两个班

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

Role {
    private String name;
    private boolean disabled;
}
是否有方法查询用户表并使用此查询从他/她的角色集中“隐藏”禁用的角色?在我运行查询后是否应处理此问题?

您可以使用HQL执行

HQL

SELECT u FROM User u JOIN u.roles r WHERE r.disabled = 0
这假设您已将
布尔值设置为映射到类型为
Number(1)

休眠条件

List users = sess.createCriteria(User.class)
    .createCriteria("roles")
        .add( Restrictions.like("disabled", new Integer(0)))
    .list();
  • 您应该通过实现角色的访问器方法将其封装到
    User
    类中。此方法将仅返回已启用的角色。这修复了隐藏禁用角色的问题

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

  • 最简单的方法是,可以使用注释。这是Hibernate专有注释,我不喜欢专有注释,但它适合您的情况。


    很抱歉,旧的链接,但在最新的Hibernate手册中,我没有找到关于此注释的好解释,尽管它仍然有效。

    我忘了提到我正在使用Hibernate条件查询表,有没有办法使用它来解决它?@MrThys您的布尔值在数据库中是什么类型的?数字(1)像你一样assumed@MrThys您是否通过注释或xml设置映射?如果您将sql设置为显示正在发出的sql命令,那么我最终使用了xml变量@MrThys,实际上,由于您发布的代码不包含注释,我可以直接将您指向xml。我现在习惯了注释。但很高兴我至少给你指出了正确的方向
    List users = sess.createCriteria(User.class)
        .createCriteria("roles")
            .add( Restrictions.like("disabled", new Integer(0)))
        .list();