2016-05-24 2 views
1

Je rencontre des problèmes avec les tables jointes dans Java Spring hibernate. Voici mon problème:Joindre plusieurs tables dans Java Spring Hibernate

Je développe un site Web et dans une de mes pages j'ai besoin des données de trois tables, elles sont x, y, z. J'ai cartographié chacun d'entre eux dans l'entité et possède son propre référentiel. Dans cette page, je vous montre les données en utilisant cette requête:

SELECT x.a, y.b, z.c FROM x,y,z WHERE x.id = y.name AND z.id = y.personalId AND 
(x.id like %'searchedId'% or y.id like %'searchedId'% or z.id like %'searchedId'%) AND 
(x.name like %'searchedName'% or y.name like %'searchedName'% or z.name like %'searchedName'%) 

Le problème est, le searchedId et searchedName est une colonne en option et ils pourraient être une chaîne vide et quand ils sont des chaînes vides, je ne pas besoin de mettre les dans ma requête pour l'accélérer. J'ai essayé d'utiliser le générateur de critères, mais comme le résultat est une colonne jointe provenant de plusieurs tables, je ne peux pas les placer dans un référentiel.

Répondre

2

Dans ce cas, vous pouvez alors dynamiquement construire quelque chose comme requête ci-dessous natif:

StringBuilder query = new StringBuilder("SELECT x.a, y.b, z.c FROM x,y,z WHERE x.id = y.name AND z.id = y.personalId "); 

if (searchId !=null) 
    query .append(" AND 
(x.id like %'searchedId'% or y.id like %'searchedId'% or z.id like %'searchedId'%) "); 

if (searchedName !=null) 
    query .append(" AND 
(x.name like %'searchedName'% or y.name like %'searchedName'% or z.name like %'searchedName'%) "); 

SQLQuery query = session.createSQLQuery(query); 
List result = query.list(); 
+0

Désolé, mais je ne peux pas voir votre requête générer dynamiquement. Peut-être avez-vous oublié de les mettre. –

+0

Je l'ai ajouté maintenant.Vous pouvez créer une requête nativeSQL et seulement lorsque searchId et searchName ne seront pas NULL, ils seront ajoutés à la requête principale. – shankarsh15

+0

Et comment dois-je l'exécuter? Je veux dire que je devrais mettre dans un dépôt? Et quelle serait la valeur de retour? Désolé, je suis nouveau dans ce domaine. –