当前位置: 首页 > 知识库问答 >
问题:

Hibernate--用注释映射三个表

冉永宁
2023-03-14

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

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

我使用的是hibernate 4.2.2。

共有1个答案

艾雪风
2023-03-14

只是一个提示,不确定这是否解决了它:为什么不使用@ManyTomany注释,而使用@ElementCollection呢?@ElementCollection通常与@CollectionTable关联,而不与@Jointable关联。

 类似资料:
  • 我想让hibernate生成一些带有外键的表等等。我将给出我希望hibernate生成的查询的一个示例: 所以这个查询应该由hibernate通过注释生成。与此对应的类是: 有关中的应映射到的内容的示例(中的每个助记符在中只有一个值): 正如您所看到的,我在文档的帮助下做了一些尝试,但是我不能让Hibernate生成外键。如果有人能告诉我这个类需要的注释和值,那就太好了,这样我就可以自己为其他类做

  • 问题内容: 几天前,我开始与Hibernate合作时,我只是想知道:假设您正在从头开始一个项目。您是否将使用基于注释的映射或Hibernate映射文件来生成数据库模式。 据我了解,Hibernate映射文件提供了一些注解所没有的功能(至少不是完全等效的功能)。但是,我仍然感觉到,如今,使用Hibernate的项目宁愿基于注释而不是Hibernate映射文件。 有没有人选择过注解上的映射文件,如果是

  • 问题内容: 我的Java模型上有一个枚举类型,我想映射到数据库中的表。我正在使用“hibernate注释”,但我不知道该怎么做。由于我搜索的答案比较旧,我想知道哪种方法最好? 提前致谢 问题答案: 除了注释,您还需要其他东西吗?例如,以下枚举: 可以这样使用和注释: 您可以使用批注的enum属性指定枚举应如何在数据库中持久化。指定该枚举将作为整数值保留。在这里,设置为将永久保存为0,保留为1,依此

  • 我试图在类别和发布类(OneToMany)之间建立关系,我需要删除所有属于特定类别的发布。我不知道我是否遗漏了一些注释,但这是我在执行查询时的错误: org.springframework.web.util.NestedServletException:请求处理失败;嵌套异常org.hibernate.exception.ConstraintViolationException:无法执行更新查询o

  • 我有这些桌子: 由该类表示: 原因:org.hibernate.mappingException:无法确定:java.util.map的类型,位于表:product,列:[org.hibernate.mapping.simplevale.getType(simplevale.java:349)位于org.hibernate.mapping.simplevale.isvalid(simplevale

  • 问题内容: 考虑此问题中列出的情况: 在Hibernate中映射多级继承 如何使用注释而不是hbm文件完成此映射? 问题答案: 您具体遇到什么问题?通过联接的子类映射类层次结构非常简单: 更新 (基于Michal的评论)。 如果您确实要使用区分符(并且您应该有 充分的 理由这样做),则可以通过将基于类的表策略与辅助表进行混合来实现: 这种方法的缺点是,您必须为每个映射的属性显式指定表: