没有单独的连接表,如何使用Hibernate的@OneToMany关系?

20

考虑以下数据库模式:

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 */
}

现在我会收到一个错误"表mydb.usergroup_user不存在",因为它期望一个连接表。我的数据结构"已经定型",因为需要与其他此应用程序将替代的应用程序进行互操作性,因此我不会创建一个连接表。而且也不应该需要它。如何创建一个简单的List<User> users,其中User.groupId == UserGroup.Id

1个回答

24

我认为你需要在@OneToMany注解中添加mappedBy="UserGroup"


在我的情况下,我已经添加了mappedBy,但它仍然不起作用。我还需要做些什么吗? - Chris
1
尝试添加 @JoinColumn(name="<column-name>") - Hakim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接