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
?
Großartig, das hat den Trick! :-) Vielen Dank! – niklassaers
In meinem Fall habe ich das mappedBy hinzugefügt, aber es funktioniert immer noch nicht. Gibt es noch etwas, was ich tun muss? – Chris
Versuchen Sie eine '@JoinColumn (name =" ")' hinzuzufügen. –
h4k1m