【问题标题】:Hibernate - mapping three tables with annotationsHibernate - 使用注释映射三个表
【发布时间】:2013-11-25 07:12:29
【问题描述】:

我有三个表:用户、角色、董事会。每个用户可以拥有多个版块,但在一个版块中,用户只能拥有一个角色。我创建了三个类并添加了注释:

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 创建一个新表,如下所示:

创建表userboardrole ( id bigint(20) 非空, role_id bigint(20) 非空, board_id bigint(20) 非空, 主键 (id,board_id), 唯一键UK_3lunj2moakkbpehqwqkjcvlf4 (role_id),FK_3lunj2moakkbpehqwqkjcvlf4 (role_id), 键FK_ta3fwgh4sln85f6f3jjbte38u (board_id), 键FK_lgd2b2mph9qoc1pe2h9r2wu8u (id), 约束FK_lgd2b2mph9qoc1pe2h9r2wu8u外键(id)参考usersid), 约束FK_3lunj2moakkbpehqwqkjcvlf4外键(role_id)参考boardrolerole_id), 约束 FK_ta3fwgh4sln85f6f3jjbte38u 外键 (board_id) 参考 boards (board_id) ) ENGINE=InnoDB 默认字符集=utf8;

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

我使用的是休眠 4.2.2。

【问题讨论】:

  • 我认为在您的地图中添加 @ManyToMany 注释将删除唯一的 role_id 约束。

标签: java mysql hibernate jpa hibernate-annotations


【解决方案1】:

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

【讨论】:

  • 是的,你是对的。我删除了@ElementCollection 并添加了@ManyToMany,表格看起来不错。谢谢!
猜你喜欢
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 2010-10-22
  • 1970-01-01
  • 2017-06-17
  • 1970-01-01
  • 2015-08-20
  • 1970-01-01
相关资源
最近更新 更多