1

ユーザーアカウントを使用してWebアプリを開発しています。私には3つのシステムロールと2人のユーザーがいます。私はそれをこのように実装しました(理解を深めるために簡略化されています):

    @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

あなたはあなたの設計の仮定に正しいです。実生活では多対多の関係は非常にまれであると誰かが言いまし。3番目のテーブル/オブジェクトが必要です。これを`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 に答える