zu suchen Ich arbeite an einem Spring-MVC-Projekt, in dem ich Hibernate als das ORM-Tool verwende. Eines der Merkmale des Projekts ist, dass es nach anderen Benutzern suchen kann, indem es verschiedene Parameter wie Land, Stadt usw. angibt. Nun würde ich gerne mehrere Länder für die Suche durchgehen. Aus diesem Grund sende ich eine :
getrennte Namen von Ländern an die Methode.HQL: Doppelpunkt getrennte Strings für mehrere Parameter hinzufügen, um mit
Da die Methode ursprünglich nur für ein einzelnes Land galt, habe ich die Abfrage so geändert, dass sie in dieser Reihenfolge funktioniert. Ist dies der richtige Weg, um mehrere Parameter zu übergeben, da die Abfrage komplex ist? Vielen Dank.
@Override
public List<Student> addHostSearchHistory(HostSearchHistory hostSearchHistory, Long hostId) {
String queryString = giveMeFormattedHostSearchString("AND",hostSearchHistory);
Query query = session.createQuery(queryString);
if (!(hostSearchHistory.getCity() == null)) {
if (!(hostSearchHistory.getCity().equals(""))) {
query.setParameter("city", "%"+hostSearchHistory.getCity().toUpperCase()+"%");
}
}
List<Student> studentList = query.list();
Query query1 = session.createQuery(giveMeFormattedHostSearchString("OR",hostSearchHistory));
if (!(hostSearchHistory.getCity() == null)) {
if (!(hostSearchHistory.getCity().equals(""))) {
query1.setParameter("city", "%"+hostSearchHistory.getCity().toUpperCase()+"%");
}
}
}
private String giveMeFormattedHostSearchString(String clause, HostSearchHistory hostSearchHistory){
StringBuilder sb = new StringBuilder();
sb.append("from Student as s where ");
if (!(hostSearchHistory.getCountry() == null)) {
if (!(hostSearchHistory.getCountry().isEmpty())) {
String[] countries = hostSearchHistory.getCountry().split(":");
sb.append("(");
for(String s : countries){
sb.append(" ").append("upper(s.studentCountry) like ").append(s);
}
sb.append(")");
}
}
if (!(hostSearchHistory.getCity() == null)) {
if (!(hostSearchHistory.getCity().isEmpty())) {
sb.append(" ").append(clause).append(" ").append("upper(s.city) like :city");
}
}
}
Gibt es eine bessere weniger fehleranfällig Art und Weise für mehrere Länder zu suchen .. Bitte beachten Sie, ich habe 3 enthalten Parameter nur Unordnung zu vermeiden. Vielen Dank.
Können Sie Ihren Code zumindest richtig formatieren? Und bitte nur verwandten Code in Ihrer Frage (Keine Ahnung, wie die StudentList und Führerschein auf Ihre Frage bezogen ist) –
@AdrianShum: Danke. Ich habe den kommentierten Code und den Führerschein entfernt. Ich habe nur die Stadt als Referenz behalten, um zu sehen, wie die Abfrage strukturiert ist. Vielen Dank. :-) –
nur wundern, ist es wirklich schwer, den Code richtig eingerückt? ... –