2017-02-02 5 views
0

Zunächst einmal klarstellen, dass ich mit Datenbanken ziemlich schlecht bin, so bitte nicht mit meinem Code bedeuten: P„where“ Einschränkungen funktionieren nicht auf HQL-Abfrage mit Join-Klausel

Ich habe ein Problem mit einer Abfrage auf Hibernate mit Join und Einschränkungen. Ich habe eine riesige Liste von Assignments und einige von ihnen haben ein Asr Objekt.

queryString.append("select new commons.bo.assignment.AssignmentAssociateExtract(" 
    + " assignment.id, assignment.contract.assignmentStatus," 
    + " assignment.contract.beginDate, assignment.contract.endDate," 
    + " assignment.contract.contractType, assignment.organizationalData.homeCountryKey," 
    + " assignment.organizationalData.hostCountryKey," 
    + " assignment.organizationalData.homeOrgUnitKey," 
    + " assignment.associate.globalIdAssociate," 
    + " assignment.associate.localIdHome," 
    + " assignment.associate.firstName," 
    + " assignment.associate.lastName)" 
    + " from Assignment assignment left join assignment.asr asr" 
    + " where assignment.contract.assignmentStatus.code = 5" 
    + " and asr.homeAsrElegibility is not 'X'" 
    + " or asr.homeAsrElegibility is null" 
); 

Ich erstellte diese Abfrage Schritt für Schritt. Bevor ich es ohne die Join-Klausel left join assignment.asr asr erstellte, funktionierte es gut, aber natürlich zeigte es nicht die Assignments, die kein Asr Objekt hatte. Nachdem ich die Join-Klausel hinzugefügt, zeigt er nun jedes einzelne Assignment (10.000 Datensätze, wenn diejenigen, die eine assignmentStatus = 5 haben nur 4.000 sind) mehr und die Beschränkungen wie

where assignment.contract.assignmentStatus.code = 5 

nicht reflektiert im Ergebnis.

Also zusammenfassend: Ich brauche eine Liste mit allen Zuweisungen mit assignmentStatus = 5 und asr.homeAsrElegibility! = 'X'. Es muss aber auch alle Zuweisungen mit assignmentStatus = 5 enthalten, auch wenn sie kein Asr-Objekt haben.

Irgendwelche Ideen ?? Vielen Dank!

Antwort

1

Klammer hilft, die Situation zu klären.

queryString.append("select new commons.bo.assignment.AssignmentAssociateExtract(" 
    + " assignment.id, assignment.contract.assignmentStatus," 
    + " assignment.contract.beginDate, assignment.contract.endDate," 
    + " assignment.contract.contractType, assignment.organizationalData.homeCountryKey," 
    + " assignment.organizationalData.hostCountryKey," 
    + " assignment.organizationalData.homeOrgUnitKey," 
    + " assignment.associate.globalIdAssociate," 
    + " assignment.associate.localIdHome," 
    + " assignment.associate.firstName," 
    + " assignment.associate.lastName)" 
    + " from Assignment assignment left join assignment.asr asr" 
    + " where assignment.contract.assignmentStatus.code = 5" 
    + " and ((asr.homeAsrElegibility is not null and asr.homeAsrElegibility is not 'X')" 
    + " or (asr.homeAsrElegibility is null))" 
); 
+0

Sie haben Recht! Ich habe versucht, die 'is not 'X''-Klausel zu löschen und einfach die letzte zu verlassen und natürlich das' or'-Schlüsselwort zu löschen und es funktioniert. Vielen Dank! – Carloshf

+0

Gern geschehen. –

Verwandte Themen