Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate-使用注释映射三个表_Java_Mysql_Hibernate_Jpa_Hibernate Annotations - Fatal编程技术网

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
,这张表看起来不错。非常感谢。