Tengo que aplicar JPA en una base de datos heredada con un diseño horrible. Desafortunadamente no es posible cambiarlo. Afortunadamente es solo para acceso de solo lectura.@ManyToMany sin tabla de unión (base de datos heredada)
Una de las cosas más extrañas que encontré es una relación de "muchos a muchos" sin una tabla de unión (o intermedio). Esta es una simplificación de la estructura de la tabla:
USER ACCESS
---- ------
ID int primary key ID int primary key
NAME varchar2(20) NAME varchar2(20)
ACCESS_GROUP int ACCESS_GROUP int
- columnas ACCESS_GROUP pueden repetirse en ambas tablas
- un usuario puede estar relacionado con N ACCESO
- Uno de acceso puede estar relacionado con N USUARIO
"conceptualmente" este tablas deben ser mapeados con las clases de Java de esta manera:
public class User {
private Integer id;
private String name;
@ManyToMany private List<Access> accessList;
}
public class Access {
private Integer id;
private String name;
@ManyToMany private List<User> userList;
}
Pero creo que esto no es posible. ¿Cuál cree que es el mejor enfoque para acceder a estas tablas en JPA y navegar a través de ellas?
En realidad, esto no es un H: M. ¿Cómo se almacena que una fila de Usuario o Acceso es parte de dos grupos de acceso? La única manera de lograr eso sería duplicar las otras columnas (que no sean PK) y en ese caso, desde la perspectiva del diseño, son entidades diferentes. En cambio, lo que tienes son dos relaciones 1: M independientes. – Thomas