0

我有三个表:用户、角色、董事会。每个用户可以拥有多个版块,但在一个版块中,用户只能拥有一个角色。我创建了三个类并添加了注释:

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 默认字符集=utf8;

问题是列 role_id 是唯一的。有没有办法使用注释将唯一的列设置为false?感谢您的任何帮助。

我正在使用休眠 4.2.2。

4

1 回答 1

1

只是一个提示,不确定这是否解决了它:为什么不使用@ManyToMany注释并@ElementCollection改用?@ElementCollection通常与 a 相关联@CollectionTable,而不与 a相关联@JoinTable

于 2013-11-12T22:45:15.437 回答