Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Überwintern - Gibt es eine Möglichkeit, 2 Spalten gegen 1 zu verbinden?

Lösung 1

Erstellen Sie eine Datenbankansicht für Table1 die den Fremdschlüssel verfügbar macht, der auf Table2 verweist . Projizieren Sie den Fremdschlüssel aus Ihrer geposteten Abfrage, den Sie sowieso für die Ansicht verwenden. Ordnen Sie dann Ihre Entität der Ansicht zu.

Lösung 2

Verwenden Sie Join-Formel :

Zum Beispiel in der Entität, die Table1 zugeordnet ist Definieren Sie die Viele-zu-Eins-Verknüpfung mit der Entität, die Table2 zugeordnet ist (scheint Ihr Anwendungsfall zu sein):

@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;

Join-Formeln scheinen jedoch im Moment in Hibernate sehr anfällig zu sein (ich habe es geschafft, dass dies nur für Viele-zu-Eins-Assoziationen funktioniert, und ich musste Entity2 erstellen Serializable implementieren; Andernfalls funktionierte es nicht und warf einige seltsame NullPointer- und ClassCastException s).