ユーザー、ロール、ボードの 3 つのテーブルがあります。各ユーザーは複数のボードを持つことができますが、1 つのボードではユーザーは 1 つのロールしか持つことができません。3 つのクラスを作成し、注釈を追加しました。
class User {
@Id
@GeneratedValue
@Column(name = "id")
private long id;
@Column(name = "mail")
private String mail;
...
@JoinTable(name = "userBoardRole",
joinColumns = @JoinColumn(name = "id", unique = false),
inverseJoinColumns = @JoinColumn(name = "role_id", unique = false))
@MapKeyJoinColumn(name = "board_id", unique = false)
@ElementCollection
private Map<Board, Role> boardRoleMap = new HashMap<Board, Role>();
}
class Role {
@Id
@GeneratedValue
@Column(name = "role_id")
private long id;
@Column(name = "name")
private String name;
...
}
class Board {
@Id
@GeneratedValue
@Column(name = "role_id")
private long id;
@Column(name = "name")
private String name;
...
}
Hibernate は、次のような新しいテーブルを作成します。
CREATE TABLE
userboardrole(idbigint(20) NOT NULL,role_idbigint(20) NOT NULL,board_idbigint(20) NOT NULL, PRIMARY KEY (id,board_id), UNIQUE KEYUK_3lunj2moakkbpehqwqkjcvlf4(role_id), KEYFK_3lunj2moakkbpehqwqkjcvlf4(role_id), KEYFK_ta3fwgh4sln85f6f3jjbte38u(board_id), KEYFK_lgd2b2mph9qoc1pe2h9r2wu8u(id), CONSTRAINTFK_lgd2b2mph9qoc1pe2h9r2wu8uFOREIGN KEY (id) 参照users(id)、制約FK_3lunj2moakkbpehqwqkjcvlf4外部キー (role_id) 参照boardrole(role_id)、制約FK_ta3fwgh4sln85f6f3jjbte38u外部キー (board_id) 参照boards(board_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
問題は、列 role_id が一意であることです。注釈を使用して、一意の列を false に設定する方法はありますか? 助けてくれてありがとう。
休止状態 4.2.2 を使用しています。