Considere el siguiente esquema de base de datos:Hibernate @OneToMany sin unirse a una tabla separada
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 sólo puede ser miembro de un grupo, sino un grupo de usuarios puede existir de muchos usuarios. Muy bien hasta ahora, hagamos las entidades en Hibernate. Aquí es 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í es 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 es "inamovible" 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 un List<User> users
que simplemente sea una lista de Usuario donde User.groupId == UserGroup.Id
?
¡Espléndido, eso funcionó! :-) ¡Muchas gracias! – niklassaers
En mi caso, he agregado el mappedBy, pero aún no funciona. ¿Hay algo más que deba hacer? – Chris
Intenta agregar un '@JoinColumn (name =" ")'. –
h4k1m