休眠 @OneToMany 没有单独的连接表

Posted

技术标签:

【中文标题】休眠 @OneToMany 没有单独的连接表【英文标题】:Hibernate @OneToMany without a separate join table 【发布时间】:2010-11-21 14:08:03 【问题描述】:

考虑以下数据库架构:

create table UserGroup ( id int not null auto_increment, name varchar(200),
    primary key(id));
create table User ( id int not null auto_increment, name varchar(200),
    groupId int not null, primary key(id));

User.groupId = UserGroup.id,所以一个用户只能是一个组的成员,但一个用户组可以存在多个用户。到目前为止很好,让我们在 Hibernate 中制作实体。这里是User

@Entity
@Table(name = "User")
public class User 

    @Id
    @Column(name="id", nullable = false)
    private Integer id;

    @Column(name="name", length = 200, nullable = true)
    private String name;

    @ManyToOne(fetch=FetchType.EAGER)
    @JoinColumn(name = "groupId", nullable = false, insertable=false, updatable=false)
    @ForeignKey(name="FK_GroupId")
    private UserGroup userGroup;

    /* Getters, Setters, toString, equals & hashCode */

这里是UserGroup

@Entity
@Table(name = "UserGroup")
public class UserGroup 

    @Id
    @Column(name="id", nullable = false)
    private Integer id;

    @Column(name="name", length = 200, nullable = true)
    private String name;

    @OneToMany(fetch=FetchType.EAGER)
    private List<User> users;

    /* Getters, Setters, toString, equals & hashCode */

现在我会收到一个错误"Table mydb.usergroup_user' doesn't exist",因为它需要一个连接表。由于与此应用程序将替换的其他应用程序的互操作性,我的数据结构是“一成不变的”,因此我不会制作连接表。此外,它不应该是必需的。我怎样才能制作一个List&lt;User&gt; users,它只是一个用户列表,其中User.groupId == UserGroup.Id

【问题讨论】:

【参考方案1】:

我认为您需要@OneToMany 注释中的mappedBy="UserGroup"

【讨论】:

就我而言,我已经添加了 mappedBy,但它仍然无法正常工作。我还有什么需要做的吗? 尝试添加@JoinColumn(name="&lt;column-name&gt;")

以上是关于休眠 @OneToMany 没有单独的连接表的主要内容,如果未能解决你的问题,请参考以下文章

非主键之间的休眠关系OneToMany

@OneToMany 与休眠中的关联表

非冗余休眠列表映射 (OneToMany)

我在@OneToMany 休眠映射中遇到错误?

无法在 HIbernate 4 中保持 OneToMany 关系

JPA @ManyToOne 用于休眠