Mi base de datos contiene 3 tablas: las entidades de usuario y servicio tienen una relación de muchos a muchos y se unen con la tabla SERVICE_USER de la siguiente manera:
USUARIOS - SERVICIO_USUARIO - SERVICIOS
La tabla SERVICE_USER contiene una columna BLOQUEADA adicional.
¿Cuál es la mejor manera de realizar tal mapeo? Estas son mis clases de entidad
@Entity
@Table(name = "USERS")
public class User implements java.io.Serializable {
private String userid;
private String email;
@Id
@Column(name = "USERID", unique = true, nullable = false,)
public String getUserid() {
return this.userid;
}
.... some get/set methods
}
@Entity
@Table(name = "SERVICES")
public class CmsService implements java.io.Serializable {
private String serviceCode;
@Id
@Column(name = "SERVICE_CODE", unique = true, nullable = false, length = 100)
public String getServiceCode() {
return this.serviceCode;
}
.... some additional fields and get/set methods
}
Seguí este ejemplo http://giannigar.wordpress.com/2009/09/04/m ... using-jpa / Aquí hay un código de prueba:
User user = new User();
user.setEmail("e2");
user.setUserid("ui2");
user.setPassword("p2");
CmsService service= new CmsService("cd2","name2");
List<UserService> userServiceList = new ArrayList<UserService>();
UserService userService = new UserService();
userService.setService(service);
userService.setUser(user);
userService.setBlocked(true);
service.getUserServices().add(userService);
userDAO.save(user);
El problema es que hibernate persiste User object y UserService one. Sin éxito con el objeto CmsService
Traté de usar EAGER fetch - sin progreso
¿Es posible lograr el comportamiento que espero con la asignación proporcionada anteriormente?
¿Quizás haya alguna forma más elegante de mapear tabla de unión de muchos a muchos con una columna adicional?
@ElementCollection
de (o ambos) las entidades de Usuario y Servicio.[userFK, serviceFK]
, utilice una restricción única.Busco una forma de asignar una tabla de asociación de muchos a muchos con columnas adicionales con hibernación en la configuración de archivos xml.
Suponiendo que tiene dos tablas 'a' y 'c' con una asociación de muchos a muchos con una columna llamada 'extra'. Porque no encontré ningún ejemplo completo, aquí está mi código. Espero que ayude :).
Primero, aquí están los objetos Java.
Ahora, tenemos que crear la tabla de asociación. El primer paso es crear un objeto que represente una clave primaria compleja (a.id, c.id).
Ahora creemos el objeto de asociación en sí.
En este punto, es hora de asignar todas nuestras clases con la configuración hibernate xml.
A.hbm.xml y C.hxml.xml (calla lo mismo).
Y luego el archivo de mapeo de asociación, a_c.hbm.xml.
Aquí está el ejemplo de código para probar.
fuente
Como se dijo anteriormente, con JPA, para tener la oportunidad de tener columnas adicionales, debe usar dos asociaciones OneToMany, en lugar de una sola relación ManyToMany. También puede agregar una columna con valores autogenerados; de esta manera, puede funcionar como la clave principal de la tabla, si es útil.
Por ejemplo, el código de implementación de la clase adicional debería verse así:
fuente