sql >> Base de Datos >  >> RDS >> Mysql

Hibernate:¿hay alguna forma de unir 2 columnas contra 1?

Solución 1

Cree una vista de base de datos en la Table1 que expone la referencia de clave externa Table2 . Proyecte la clave externa de su consulta publicada que utilizará para la vista de todos modos. Luego asigne su entidad a la vista.

Solución 2

Use fórmula de unión :

Por ejemplo, en la entidad asignada a Table1 definir la asociación de muchos a uno con la entidad asignada a Table2 (parece ser su caso de uso):

@ManyToOne
@JoinColumnsOrFormulas({
      @JoinColumnOrFormula([email protected](value="(SELECT t2.serial FROM Table2 t2 WHERE serial1 = t2.serial OR serial2 = t2.serial)", referencedColumnName="serial"))
    })
private Entity2 entity2;

Sin embargo, las fórmulas de unión parecen ser muy frágiles en Hibernate por el momento (logré hacer que esto funcionara solo para asociaciones de muchos a uno y tuve que hacer Entity2 implementar Serializable; de lo contrario, no funcionó y arrojó un extraño NullPointer- y ClassCastException s).