5

Así que hice esta pregunta ayer, pero los postes de la portería han cambiado y la cuestión es diferente:Hibernate/JPA de muchos a muchos a través de una tabla de unión y una clave compuesta, tema único de restricción

Hibernate/JPA Collection of Elements with Many to Many relationship?

Quiero saber si es posible crear entidades que modelarán mi relación requerida para que Hibernate cree mi esquema cuando active mi aplicación.

La relación que quiero es así:

1 http://a8.sphotos.ak.fbcdn.net/hphotos-ak-ash4/417593_10150594114269218_505554217_8657377_1475865815_n.jpg

Lo que pasa es que la tabla de unión de hecho puede contener filas que no enlazan con cualquier elemento. La estructura representa la categorización de elementos basados ​​en el par "tipo" y "valor" y se ingresan al sistema fuera de esta aplicación en particular.

Lo que me gustaría poder hacer es configurar mi Element Hibernate Entity para que contenga una lista de categorías, a través de un mapeo, de modo que pueda ver a qué categorías pertenece mi elemento Y para que hibernate cree la tabla para yo.

Esto es lo que tengo hasta el momento: la cartografía de esto en mi clase de elementos de entidad de esta manera:

@ManyToMany(fetch = FetchType.EAGER) 
@JoinTable(name = "ELEMENT_ELEMENTCATOGORY", joinColumns = { 
     @JoinColumn(name = "type", referencedColumnName = "type"), 
     @JoinColumn(name = "value", referencedColumnName = "value") }) 
@Column(name = "category") 
public List<ElementCategory> getCategories() { 
    return categories; 
} 

Esto mayor parte de lo que quiero, que crea mis tablas que el anterior, exactamente lo que ellos quieren barra una cosa, hay una restricción única añadida a la tabla de elementos en el par (tipo, valor). No quiero esto porque varios elementos pueden tener el mismo par de tipo y valor, necesito poder detener la restricción única desde el comienzo creado, pero no puedo entender cómo con el mapeo actual, ¿puedo hacer esto? ¿Me estoy perdiendo el objetivo de una relación de muchos a muchos?

+0

Aún creo que necesita una InverseJoinColumn para incluir el ID de ElementCategory en su tabla de unión. – bvanvelsen

+0

¿Podría ser que suena más lógico que el tipo y el valor son una entidad? entonces la identificación de este tipo, entidad de valor es una joincolumn del – bvanvelsen

+0

que se puede integrar. La identificación está implícita en el hecho de que tengo un conjunto de categorías de elementos, como con cualquier conjunto. Como dije, las tablas se están configurando correctamente y eso incluye el enlace entre "categoría" en la tabla de unión e "id" en la tabla ElementCategory. ¿Cree que la unión inversa eliminará la restricción única de la tabla de elementos? Lo intentaré. – Link19

Respuesta

1

Parece bastante lógico que Hibernate ponga una restricción única en la columna de tipo y valor.

Usted dice en el mapeo @ManyToMany que en el que se puede unir el joincolumns es la columna de tipo y valor. Básicamente, usted dice que la hibernación debe determinar qué elemento está acoplado a ElementCategory por la propiedad de valor y tipo. por lo tanto, la combinación de esas 2 propiedades debe ser única. De lo contrario hibernate no sabría qué elemento pertenece a qué ElementType

Si desea que varias entidades Element se puedan acoplar a varias entidades ElementType y la combinación de tipo y valor no sea siempre única, no puede usar esas propiedades como joincolumns

+0

¿Pero entonces no habría forma de que la clase Element contenga una lista de categorías? ¿Es solo una mala suerte porque necesita un mejor diseño? – Link19

+0

puede contener una lista de categorías, pero no se basa en el tipo y valor si esos 2 valores no son únicos para cada Elemento – bvanvelsen

+0

Exactamente, pero en mi modelo las categorías se basan en la combinación de tipo y valor y múltiples elementos PUEDEN tener el mismo par, entonces ¿es imposible que deje que hibernate administre esto? lo mejor que puedo hacer es implementar alguna funcionalidad en mi servicio que trate las categorías por separado y hacer que la Lista sea transitoria. – Link19

Cuestiones relacionadas