为什么hibernate在映射多对多关系时会产生额外的实体?

时间:2011-11-12 06:56:16

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

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

Database schema

表示多对多关系的表格(users_groups_maps,articles_tags_maps reported_articles,favourite_articles和browse_later_articles)很少。我创建了一个反向配置文件并开始进行逆向工程,因此我可以从中获取Java类(Annotations,JDK 5和EJB3,这将导致javax.persistence。* annotations)。

基本表格(例如警告,用户)很好(有

等字段)
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呢?

//此外,我还没有与hibernate相关的问题 - 在评论 private_messages 表格中,有那些parent__id字段,应该引用相同的字段表。我为自己的表创建了一个外键,但我不确定它是否正确,是吗?应该怎么样?在这种关注中,hibernate生成两个具有相同名称的字段:     私人评论评论; 在评论课。

此致 马尔钦

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

让&#34; hibernate工具&#34; /&#34; Jboss工具&#34;在bean类中生成多对多的注释,必须使用简单的映射表。 这些映射表应该只包含两个外键的列,这些外键必须是组合的主键。