0

ユーザー、ロール、ボードの 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 KEY UK_3lunj2moakkbpehqwqkjcvlf4( role_id), KEY FK_3lunj2moakkbpehqwqkjcvlf4( role_id), KEY FK_ta3fwgh4sln85f6f3jjbte38u( board_id), KEY FK_lgd2b2mph9qoc1pe2h9r2wu8u( id), CONSTRAINT FK_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 を使用しています。

4

1 に答える 1

1

これで解決するかどうかはわかりませんが、@ManyToMany注釈を使用して@ElementCollection代わりに使用しないのはなぜですか? は通常、 ではなく に@ElementCollection関連付けられています。@CollectionTable@JoinTable

于 2013-11-12T22:45:15.437 に答える