2009-08-21 21 views
14

Rozważmy następujący schemat bazy danych:Hibernate @OneToMany bez oddzielnego dołączyć tabeli

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, więc użytkownik może należeć tylko do jednej grupy, ale grupa użytkownika może istnieć od wielu użytkowników. Drobne jak na razie, sprawmy, że obiekty będą w stanie hibernacji. Oto 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 */ 
} 

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

Teraz będę się błąd "Table mydb.usergroup_user' doesn't exist" ponieważ oczekuje join-stolik. Moja struktura danych jest "osadzona w kamieniu" ze względu na współdziałanie z innymi aplikacjami, które ta aplikacja zastąpi, więc nie będę tworzyć tabeli sprzężeń. Ponadto nie powinno być potrzebne. Jak mogę utworzyć List<User> users, która jest po prostu listą użytkownika, gdzie User.groupId == UserGroup.Id?

Odpowiedz

16

Myślę, że potrzebujesz mappedBy="UserGroup" w adnotacji @OneToMany.

+0

Wspaniały, to wystarczy! :-) Dziękuję Ci bardzo! – niklassaers

+0

W moim przypadku dodałem mapowane, ale nadal nie działa. Czy jest coś jeszcze, co muszę zrobić? – Chris

+0

Spróbuj dodać '@JoinColumn (name =" ")'. – h4k1m