【问题标题】:why is hibernate generating additional entities when mapping many-to-many relationship?为什么在映射多对多关系时休眠会生成额外的实体?
【发布时间】:2011-12-27 12:48:21
【问题描述】:

我目前正在制作一个应用程序,我已经开始创建一个 DB 模式,如下所示:

代表多对多关系的表(users_groups_maps、articles_tags_maps reported_articles、favourite_articles 和 browse_later_articles)很少。我创建了一个反向配置文件并开始进行反向工程,以便从中获取 Java 类(注释、JDK 5 和 EJB3,这会产生 javax.persistence.* 注释)。

基本表(如warnings、users)就好了(有字段如

private Set<BrowseLaterArticles> browseLaterArticleses = new HashSet<BrowseLaterArticles>(0);

,但我想这很好 - 我是一个冬眠新手)。

但是,问题(我猜)从那些多对多关系开始(例如 UserGroupsMaps 构造函数看起来像这样:

public UsersGroupsMaps(UsersGroupsMapsId id, Users users, Groups groups) {
    this.id = id;
    this.users = users;
    this.groups = groups;
}

,其中 UserGroupsMapsId 是 userId 和 groupId 对的包装器)

我是不是搞错了,还是应该以不同的方式编码?我知道有一个ManyToMany注解,为什么hibernate不使用它?

//另外,我有不太与休眠相关的问题 - 在 cmetsprivate_messages 表中,有那些 parent__id 字段,应该引用相同表。我为他们自己的表创建了一个外键,但我不确定它是否正确,是吗?它应该是什么样子?在这种情况下,hibernate 会生成两个具有相同名称的字段: 私人评论 cmets; 在评论类中。

问候, 马辛

【问题讨论】:

  • 请展开每个 *_maps 表的Indexes 并重新捕获/重新上传图像。
  • Marcin 这正是我遇到的问题。 User 对象应该有一个 Set 属性,而 Group 应该有一个 Set。无论我做什么,我都会得到这些虚假的中介对象。 Reveng cfg 向导中有一个部分可以调整选定列的映射,但是当它愚蠢地从头开始重新获取整个架构(而不是使用已经选择的表)时,我忽略了它。看起来这可能是该去的地方。 Dagnabbit,现在我注意到这是一个僵尸线程。废话。

标签: hibernate annotations many-to-many reverse-engineering


【解决方案1】:

您的休眠映射在某处搞砸了。 Hibernate 让您可以选择不为多对多连接对象创建对象,只要该表中没有其他列。我假设您正在使用 eclipse hibernate 插件?我会检查代码生成器的设置,看看你是否可以告诉它不要创建那个对象。

【讨论】:

  • 是的,我正在为 Eclipse 使用休眠工具。我尝试在此处发布之前取消选中此选项,两者都显示相同的结果。我没有更改逆向工程的 xml 中的任何内容,只是添加了表格。在休眠控制台配置中,dialect 设置为 MYSQL5 (InnoDB),Type 设置为 Annotations,其他选项设置为默认值。
【解决方案2】:

要让“休眠工具”/“Jboss 工具”在您的 bean 类中生成多对多注释,您必须使用简单的映射表。 这些映射表应该只有两个外键的列,这两个外键必须是组合主键。

【讨论】:

    猜你喜欢
    • 2019-08-31
    • 1970-01-01
    • 2012-05-12
    • 2021-11-11
    • 1970-01-01
    • 2021-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多