2009-08-21 3 views
14

das folgenden Datenbankschema vor:Hibernate @OneToMany ohne eine separate Tabelle beitreten

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, so dass ein Benutzer kann nur Mitglied einer Gruppe sein, aber eine Benutzergruppe kann bestehen aus viele Benutzer. Bis jetzt, lassen Sie uns die Entitäten in Hibernate machen. Hier ist 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 */ 
} 

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

Jetzt werde ich einen Fehler "Table mydb.usergroup_user' doesn't exist", weil es eine Join-Tabelle erwartet. Meine Datenstruktur ist aufgrund der Interoperabilität mit anderen Anwendungen, die diese Anwendung ersetzen wird, "in Stein gemeißelt", so dass ich keine Join-Tabelle erstellen werde. Außerdem sollte es nicht benötigt werden. Wie kann ich eine List<User> users machen, die einfach eine Liste von Benutzern ist, wo User.groupId == UserGroup.Id?

Antwort

16

Ich denke, dass Sie die mappedBy="UserGroup" in der @OneToMany Annotation benötigen.

+0

Großartig, das hat den Trick! :-) Vielen Dank! – niklassaers

+0

In meinem Fall habe ich das mappedBy hinzugefügt, aber es funktioniert immer noch nicht. Gibt es noch etwas, was ich tun muss? – Chris

+0

Versuchen Sie eine '@JoinColumn (name =" ")' hinzuzufügen. – h4k1m