Mysql
 sql >> Base de données >  >> RDS >> Mysql

Hibernate - Existe-t-il un moyen de joindre 2 colonnes contre 1 ?

Solution 1

Créer une vue de base de données sur la Table1 qui expose la clé étrangère référençant Table2 . Projetez la clé étrangère de votre requête publiée que vous utiliserez de toute façon pour la vue. Associez ensuite votre entité à la vue.

Solution 2

Utilisez formule de jointure :

Par exemple, dans l'entité mappée à Table1 définir l'association plusieurs-à-un avec l'entité mappée à Table2 (semble être votre cas d'utilisation):

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

Cependant, les formules de jointure semblent être très fragiles dans Hibernate pour le moment (j'ai réussi à faire fonctionner cela uniquement pour l'association plusieurs-à-un et j'ai dû faire Entity2 implémenter Serializable; sinon cela n'a pas fonctionné et a jeté un étrange NullPointer- et ClassCastException s).