HQL QuerySyntaxException

bluer

Aktives Mitglied
Hallo Leute,

ich möchte in meiner Applikation eine Suchfunktion einbauen. Ich arbeite mit Hibernate und einer MySQL-DB. Ich dachte es kann ja nicht so schwierig sein und habe folgende Abfrage geschrieben:
Java:
public List<Glossar> findByString(String input) {
        try{
            return em.createQuery("select g from Glossar g where lower(g.item) or lower(g.explanation) like '%:input%'", Glossar.class)
                    .setParameter("input", input).getResultList();
        }catch( Exception e){
            return null;
        }
    }
Nur leider bekomme ich folgende Exception und weiß nicht wo mein Fehler liegt:
Java:
org.hibernate.hql.ast.QuerySyntaxException: unexpected AST node: ( near line 1, column 50 [select g from model.glossar.Glossar g where lower(g.item) or lower(g.explanation) like '%:input%']
Da steht zwar "near column 50", aber was ist bitte an "g.item" falsch, wenn die Entity wie folgt aussieht:
Java:
package model.glossar;

import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class Glossar implements Serializable {

    private Long id;
    private String item;
    private String explanation;

    //getter und setter

}

Vielen Dank für eure Hilfe!
 
Zuletzt bearbeitet von einem Moderator:
S

SlaterB

Gast
funktioniert
> where lower(g.item) like '%:input%'
?
du kannst kaum beide lower per or verknüpfen, auch wenn dazu die Fehlermeldung wirklich nicht passend erscheint,
denkbar ist, die beiden Strings zusammenzufassen und dann nur einmal LIKE:
> where string1 || string 2 like ..
 

bluer

Aktives Mitglied
Die Abfrage nur einer Variablen funktioniert, aber:
  1. Warum funktioniert das "or" in der Query nicht, aber als MySQL-Anweisung?
  2. WIe passt das zu der Fehlermeldung?
  3. Wie kann ich beides mit einer Abfrage realiesieren?

Vielen Dank schonmal SlaterB!!!
 
S

SlaterB

Gast
1.
entspricht meiner Ansicht nach nicht der SQL-Syntax, habe ich noch nie gesehen, kann letztlich aber aktuell nicht MySQL testen,
in Oracle gehts nicht,
kannst ja noch nachschauen ob es überhaupt was sinnvolles macht bei dir in MySQL neben Ausführung an sich,
wird der erste Teil überhaupt auch auf LIKE geprüft?
2.
Vermutung:
die Query wird sicherlich in eine Baumstruktur überführt, das OR ist höher, also beginnt ein Ast des Baums mit lower als höchsten Element und das ist eben bereits ein Fehler, also wird beim lower gemeckert,
den Rest zu interpretieren oder gar Vermutungen anzustellen 'hey du, schreib nach lower(..) noch mehr' wäre vielleicht schön, aber ist vielleicht schwer/ spekulativ
3.
schon beantwortet
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
algebraiker QuerySyntaxException is not mapped (RCP) Data Tier 2

Ähnliche Java Themen

Neue Themen


Oben