18

次のデータベース スキーマを検討してください。

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 であるため、ユーザーは 1 つのグループのメンバーにしかなれませんが、ユーザーグループは多数のユーザーで存在できます。ここまでは問題ありません。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<User> users単純に User where のリストを作成するにはどうすればよいUser.groupId == UserGroup.Idですか?

4

1 に答える 1

22

注釈mappedBy="UserGroup"にが必要だと思います。@OneToMany

于 2009-08-21T08:13:27.457 に答える