1

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

    @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

4

1 回答 1

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<>();

现在,您可以同时浏览UserRole过滤非活动角色。

于 2012-10-03T19:24:25.867 回答