java - ejemplo - Hibernate @OneToMany sin una tabla de unión separada
relation one to many hibernate (1)
Creo que necesitas el mappedBy="UserGroup"
en la anotación @OneToMany
.
Considere el siguiente esquema de base de datos:
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, por lo que un usuario solo puede ser miembro de un grupo, pero un grupo de usuarios puede existir de muchos usuarios. Bien hasta ahora, hagamos las entidades en Hibernate. Aquí está el 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 */
}
Aquí está 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 */
}
Ahora obtendré un error "Table mydb.usergroup_user'' doesn''t exist"
porque espera una tabla de unión. Mi estructura de datos está "establecida en piedra" debido a la interoperabilidad con otras aplicaciones que esta aplicación reemplazará, por lo que no haré una tabla de unión. Además, no debería ser necesario. ¿Cómo puedo hacer una List<User> users
que simplemente es una lista de User donde User.groupId == UserGroup.Id
?