Mysql
 sql >> Database >  >> RDS >> Mysql

Ibernazione - C'è un modo per unire 2 colonne contro 1?

Soluzione 1

Crea una vista del database nella Table1 che espone la chiave esterna che fa riferimento a Table2 . Proietta la chiave esterna dalla query pubblicata che utilizzerai comunque per la vista. Quindi mappa la tua entità alla vista.

Soluzione 2

Usa la formula di adesione :

Ad esempio, nell'entità mappata su Table1 definire l'associazione molti-a-uno con l'entità mappata su Table2 (sembra essere il tuo caso d'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;

Tuttavia, le formule di unione sembrano essere molto fragili in Hibernate per il momento (sono riuscito a farlo funzionare solo per l'associazione molti-a-uno e ho dovuto creare Entity2 implementare Serializable; altrimenti non ha funzionato e ha lanciato uno strano NullPointer- e ClassCastException s).