我有三个表:用户,角色,董事会。每个用户可以拥有多个板卡,但在一个板卡中,用户只能拥有一个角色。我创建了三个类,并添加了注释:
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
(id
bigint(20)NOT NULL,role_id
bigint(20)NOT NULL,board_id
bigint(20)NOT NULL, PRIMARY KEY(id
,board_id
), UNIQUE KEYUK_3lunj2moakkbpehqwqkjcvlf4
(role_id
), KEYFK_3lunj2moakkbpehqwqkjcvlf4
(role_id
), KEYFK_ta3fwgh4sln85f6f3jjbte38u
(board_id
), KEYFK_lgd2b2mph9qoc1pe2h9r2wu8u
(id
), 约束FK_lgd2b2mph9qoc1pe2h9r2wu8u
外键(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?谢谢你的帮助。
我正在使用hibernate 4.2.2。
答案 0 :(得分:1)
只是一个提示,不确定这是否解决了这个问题:为什么不使用@ManyToMany
注释并使用@ElementCollection
代替? @ElementCollection
通常与@CollectionTable
相关联,而不与@JoinTable
相关联。