如何在用户角色中实现开始和结束日期

时间:2012-10-03 19:05:43

标签: java hibernate web-applications spring-mvc

我正在开发一个包含用户帐户的网络应用。我有三个系统角色和几个用户。我已经用这种方式实现了它(简化以便更好地理解):

    @Table(name = "user")
    public class User {

        @Id
        private String id;

        @Column(name = User.COLUMN_LOGIN)
        private String login;

        @Column(name = User.COLUMN_PASSWORD)
        private String password;

        @ManyToMany(cascade = CascadeType.DETACH, fetch = FetchType.EAGER)
        @JoinTable(name = "role_to_user",
                joinColumns={@JoinColumn(name = "userId")},
                 inverseJoinColumns={@JoinColumn(name = "roleId")})
        private Set<Role> roles = new LinkedHashSet<Role>();
   }

   @Table(name = "role")
   public class Role {

        @Id
        private String id;

        @Column(name = Role.COLUMN_ROLETYPE)
        private int roletype;
   }

将角色分配给用户的日期和结束此分配的日期的最佳方法是什么?我的想法是将列startDate和endDate添加到名为role_to_user的绑定表中,但我不知道如何告诉它休眠:)

这个好主意还是有更好的方法吗?

谢谢,Ondrej

1 个答案:

答案 0 :(得分:1)

你的设计假设是正确的。有人说,在现实生活中,多对多关系非常罕见。你需要第三个表/对象,我们称之为“RoleAssignment”:

@Entity
@Table(name = "role_to_user")
public class RoleAssignment {

    @ManyToOne
    private User user;

    @ManyToOne
    private Role role;

    private Date startDate;

    private Date endDate;

}

当然,需要在User课程中进行一些调整:

@ManyToMany()
private Set<RoleAssignment> roles = new HashSet<>();

现在,您可以从User导航到Role并在此期间过滤无效角色。