![](/img/trans.png)
[英]ManyToManyToMany - Joining three tables with Hibernate annotations
[英]Hibernate - mapping three tables with annotations
我有三個表:用戶,角色,董事會。 每個用戶可以擁有多個董事會,但在一個董事會中,用戶只能擁有一個角色。 我創建了三個類,並添加了注釋:
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? 感謝您的任何幫助。
我正在使用休眠4.2.2。
只是一個提示,不確定是否能解決問題:為什么不使用@ManyToMany
批注,而使用@ElementCollection
? @ElementCollection
通常與@CollectionTable
關聯,而不與@JoinTable
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.