2009-08-21 18 views
14

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?

Respuesta

16

Creo que necesita el mappedBy="UserGroup" en la anotación @OneToMany.

+0

¡Espléndido, eso funcionó! :-) ¡Muchas gracias! – niklassaers

+0

En mi caso, he agregado el mappedBy, pero aún no funciona. ¿Hay algo más que deba hacer? – Chris

+0

Intenta agregar un '@JoinColumn (name =" ")'. – h4k1m

Cuestiones relacionadas