una tablas tabla perder paso mac filas ejemplos dividir diseño datos crear como combinar celdas java hibernate joincolumn or-condition

java - perder - diseño de tablas en html



Anotación para unir columnas con la condición OR en lugar de AND (2)

Tengo 2 clases de Java, Relation y Person , que están presentes en mi base de datos.

Persona:

@Entity @Table(name = "persons") public class Person { @Id @Column private int id; @Column private String name; @OneToMany(fetch = FetchType.EAGER) @JoinColumns({ @JoinColumn(name = "slave_id", referencedColumnName="id"), @JoinColumn(name = "master_id", referencedColumnName="id") }) private List<Relation> relations; //Getters and setters }

Relación:

@Entity @Table(name = "relations") public class Relation { @Id @Column private int id; @Column private int child_id; @Column private int parent_id; @Column private String type; //Getters and setters }

Cada persona tiene una lista de relaciones (o no), la relación debe agregarse a la lista cuando child_id o parent_id de la relación es igual a la identificación de la persona.

TL; DR: cuando relation.child_id OR relation.parent_id = person.id => agrega relación a la lista de relaciones con la persona

El problema que estoy enfrentando es que esta anotación:

@JoinColumns({ @JoinColumn(name = "child_id", referencedColumnName="id"), @JoinColumn(name = "parent_id", referencedColumnName="id") })

crea el siguiente SQL (solo la parte necesaria):

relations relations6_ on this_.id=relations6_.slave_id and this_.id=relations6_.master_id

Cuál es la anotación correcta en Java Hibernate para generar una declaración SQL que diga O en lugar de Y


Puedes usar las anotaciones @FilterDef y @Filter .


Algunas de las opciones que puede utilizar:

  1. Vistas de la base de datos Cree la vista que se una personalizada para usted y asigne la entidad a la vista.
  2. Únete a la fórmula . Pude hacer que funcionaran solo en asociaciones de muchos a uno. Sin embargo, puede hacer que la asociación sea bidireccional y aplicar la fórmula en la entidad de Relation .
  3. @Subselect . Este es un tipo de vista Hibernate, adecuada si no puede permitirse crear una vista de base de datos real o cambiar el esquema db para que se ajuste mejor a la estructura del modelo de la entidad.

Esto y esta respuesta también podrían ser útiles.

Además, siempre puede usar dos asociaciones separadas para esclavos y maestros:

public class Person { @OneToMany @JoinColumn(name = "slave_id"), private List<Relation> slaves; @OneToMany @JoinColumn(name = "master_id"), private List<Relation> masters; public List<Relation> getRelations() { List<Relation> result = new ArrayList<>(slaves); result.addAll(masters); return result; } }

Sin embargo, tenga en cuenta que unir todos ellos en una sola consulta requiere un producto cartesiano completo entre maestros y esclavos.