Java Hibernate-使用注释映射三个表
我有三个表:用户、角色、董事会。每个用户可以有多个单板,但在一个单板中,用户只能有一个角色。我创建了三个类并添加了注释:Java Hibernate-使用注释映射三个表,java,mysql,hibernate,jpa,hibernate-annotations,Java,Mysql,Hibernate,Jpa,Hibernate Annotations,我有三个表:用户、角色、董事会。每个用户可以有多个单板,但在一个单板中,用户只能有一个角色。我创建了三个类并添加了注释: class User { @Id @GeneratedValue @Column(name = "id") private long id; @Column(name = "mail") private String mail; ... @JoinTable(name = "userBoardRole",
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;
...
}
类用户{
@身份证
@生成值
@列(name=“id”)
私人长id;
@列(name=“mail”)
私人字符串邮件;
...
@JoinTable(name=“userBoardRole”,
joinColumns=@JoinColumn(name=“id”,unique=false),
inverseJoinColumns=@JoinColumn(name=“role\u id”,unique=false))
@MapKeyJoinColumn(name=“board\u id”,unique=false)
@元素集合
私有映射boardRoleMap=新HashMap();
}
阶级角色{
@身份证
@生成值
@列(name=“role\u id”)
私人长id;
@列(name=“name”)
私有字符串名称;
...
}
班级委员会{
@身份证
@生成值
@列(name=“role\u id”)
私人长id;
@列(name=“name”)
私有字符串名称;
...
}
Hibernate创建一个新表,如下所示:
创建表userboardrole
(
id
bigint(20)不为空,
role\u id
bigint(20)不为空,
board_id
bigint(20)不为空,
主键(id
,board\u id
),
唯一密钥英国3lunj2moakbpehqwqkjcvlf4
(角色id
),
键FK_3lunj2moakbpehqwqkjcvlf4
(role_id
),
键FK_ta3fwgh4sln85f6f3jjbte38u
(board_id
),
键FK_lgd2b2mph9qoc1pe2h9r2wu8u
(id
),
约束FK_lgd2b2mph9qoc1pe2h9r2wu8u
外键(id
)引用用户(id
),
约束FK_3lunj2moakbpehqwqkjcvlf4
外键(role_id
)引用boardrole
(role_id
),
约束FK_ta3fwgh4sln85f6f3jjbte38u
外键(board_id
)引用boards
(board_id
)
)ENGINE=InnoDB默认字符集=utf8
问题是列角色\u id是唯一的。有没有办法使用注释将列唯一性设置为false?谢谢你的帮助
我使用的是hibernate 4.2.2。只是一个提示,不确定这是否解决了问题:为什么不使用@ManyToMany
注释并使用@ElementCollection
@ElementCollection
通常与@CollectionTable
关联,而不是与@JoinTable
关联。我认为在地图中添加@ManyToMany注释将删除唯一的角色id约束。是的,你是对的。我删除了@ElementCollection
并添加了@manytomy
,这张表看起来不错。非常感谢。