Hibernate - 使用注释映射三个表

时间:2013-11-12 22:11:51

标签: 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",
        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(idboard_id),      UNIQUE KEY UK_3lunj2moakkbpehqwqkjcvlf4role_id),     KEY FK_3lunj2moakkbpehqwqkjcvlf4role_id),     KEY FK_ta3fwgh4sln85f6f3jjbte38uboard_id),     KEY FK_lgd2b2mph9qoc1pe2h9r2wu8uid),     约束FK_lgd2b2mph9qoc1pe2h9r2wu8u外键(id)参考usersid),     约束FK_3lunj2moakkbpehqwqkjcvlf4外键(role_id)参考boardrolerole_id),     约束FK_ta3fwgh4sln85f6f3jjbte38u外键(board_id)参考boardsboard_id)   )ENGINE = InnoDB DEFAULT CHARSET = utf8;

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

我正在使用hibernate 4.2.2。

1 个答案:

答案 0 :(得分:1)

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