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
?
Wspaniały, to wystarczy! :-) Dziękuję Ci bardzo! – niklassaers
W moim przypadku dodałem mapowane, ale nadal nie działa. Czy jest coś jeszcze, co muszę zrobić? – Chris
Spróbuj dodać '@JoinColumn (name =" ")'. –
h4k1m