Problem beim Erstellen einer Query

markai

Aktives Mitglied
Ich hätte gerne eine Query die mir Products sucht die einen bestimmten String im Namen haben. Also wenn der Benutzer "schraube" eingibt soll eine Liste zurückgegeben werden mit Records die im Namen "schraube" enthalten. (Schrauben, Schraubenschlüssel...). Dazu habe ich folgendes gemacht:

Java:
@Entity
@NamedQueries({
    @NamedQuery(name="findByName",
        query="select p from Product p where lower(p.name) like '%:name%'")
})
public class Product implements Serializable, Comparable<Product> {
...

:name ist der Parameter den der Benutzer eingibt.

In meiner ProductFacade mach ich:

Java:
    public List<Product> findProduct(String product) {
        return em.createNamedQuery("findByName", Product.class).setParameter("name", product).getResultList();
    }

Leider bekomme ich immer diese Exception:

Java:
...
Caused by: java.lang.IllegalArgumentException: You have attempted to set a parameter value using a name of name that does not exist in the query string select p from Product p where lower(p.name) like '%:name%'.

Bin mir nicht sicher was mein Netbeans mir damit sagen will... :(
 
N

nillehammer

Gast
Probier mal folgendes:
Java:
@Entity
@NamedQueries({
    @NamedQuery(name="findByName",
        query="select p from Product p where lower(p.name) like :searchPattern")
})
public class Product implements Serializable, Comparable<Product> {
..:
Java:
public List<Product> findProduct(String product) {

        final String searchPattern = 
           new ToStringBuilder().append('%').append(product).append('%').toString();

        return em.createNamedQuery("findByName", Product.class).setParameter("searchPattern", searchPattern).getResultList();
    }

Ich glaube, dass literale in einer JPQL-Query nicht mit dynamischen Parametern gemischt werden können. Sowas
Code:
'%:name%'
geht darum nicht.
 
Zuletzt bearbeitet von einem Moderator:

JimPanse

Bekanntes Mitglied
So sollte es funktionieren...

Java:
@Entity
@NamedQueries({
    @NamedQuery(name="findByName",
        query="select p from Product p where lower(p.name) like :name")
})
public class Product implements Serializable, Comparable<Product> {
...


Java:
    public List<Product> findProduct(String product) {
        return em.createNamedQuery("findByName", Product.class).setParameter("name", product.toLowerCase()+"%").getResultList();
    }
 

markai

Aktives Mitglied
Vielen Dank euch beiden. Hat funktioniert! Jetzt habe ich noch ein weiteres Problem: Mein Product besteht aus mehreren Teilen. Nun möchte ich dass der Benutzer Produkte nach Teilen suchen kann.
Zwischen Product und Part besteht eine n:m Beziehung. Eigentlich brauche ich ja nur die Zwischentabelle Product_Part anzuschauen um herauszufinden welches Product welche Parts enthält. Allerdings kann ich mit jpa nicht direkt auf diese Zwischentabelle zugreifen (unknown Entity).

Hier noch der Code wie ich es momentan mache, um zu zeigen was ich vorhab:

Java:
    public void searchByParts() {
        List<Product> result = new ArrayList<>();
        List<Part> selectedParts = partController.getAcSelectedParts();
        for (Product product : getAllProducts) {
            if (Arrays.asList(selectedParts).containsAll(product.getParts())) {
                result.add(product);
            }
        }
        this.resultList = result;
 

Spitfire777

Bekanntes Mitglied
Denke ich zu einfach, oder tut es das hier nicht auch?

Java:
@Entity
@NamedQueries({
    @NamedQuery(name="findByName",
        query="select p from Product p where lower(p.name) like '%'||:name||'%'")
})
public class Product implements Serializable, Comparable<Product> {
...

Weil nur bei einem '%:name%' wird :name als Text gewertet und nicht als Parameter. Daher hab ich das bisher immer mit dem Konkatenationsoperator || einfach verbunden.
 
N

nillehammer

Gast
Vielen Dank euch beiden. Hat funktioniert! Jetzt habe ich noch ein weiteres Problem: Mein Product besteht aus mehreren Teilen. Nun möchte ich dass der Benutzer Produkte nach Teilen suchen kann.
Zwischen Product und Part besteht eine n:m Beziehung. Eigentlich brauche ich ja nur die Zwischentabelle Product_Part anzuschauen um herauszufinden welches Product welche Parts enthält. Allerdings kann ich mit jpa nicht direkt auf diese Zwischentabelle zugreifen (unknown Entity).
Habe es leider nicht ausprobiert, weil es mir zu viel Aufwand war, dafür jetzt ein JPA-Projekt aufzusetzen, aber die Schlüsselworte
Code:
IN
,
Code:
MEMBER OF
oder
Code:
ALL
müssten Dich zum Ziel führen. Vielleicht klappt sogar schon das:
Java:
@NamedQuery(name="findByParts", query="SELECT p FROM Product p WHERE :parts IN p.parts")
 

markai

Aktives Mitglied
Kann sein dass ich einen Denkfehler hab, aber ich glaub nicht dass das funktionieren kann. Meine Product Tabelle hat keine Parts Spalte. Muss ich die beiden Tabellen nicht über die Zwischentabelle joinen? Da dies mein erstes mal mit JPA ist hab ich keine Ahnung wie ich zu meinem Ergebnis kommen soll... ;(
 
N

nillehammer

Gast
Meine Product Tabelle hat keine Parts Spalte. Muss ich die beiden Tabellen nicht über die Zwischentabelle joinen
In plain SQL müsstest Du das. In JPA allerdings navigierst Du über die Felder, die Du in Deinen Objekten hast. Dass Product eine Collection (List? Set?) von Parts hat, habe ich aus dem Code
Code:
product.getParts()
in einem Deiner letzten Posts geschlossen.
Da dies mein erstes mal mit JPA ist hab ich keine Ahnung wie ich zu meinem Ergebnis kommen soll...
Ja, es hat bei mir auch mehr als ein Jahr gedauert, bis ich mich vom SQL-/Datenbankdenken gelöst hatte und bei den Relationen in der Objektwelt gedacht hatte.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Problem beim erstellen der DB Datenbankprogrammierung 3
N HSQLDB Problem beim Treiberladen im Jar Datenbankprogrammierung 6
S Problem beim Anlegen einer Tabelle Datenbankprogrammierung 5
T Problem beim schreiben von daten Datenbankprogrammierung 4
D MySQL Problem beim einfügen von Double-Zahlen Datenbankprogrammierung 4
cosmic Problem beim Update einer Oracle DB Datenbankprogrammierung 7
T Problem beim Update in die Access DB Datenbankprogrammierung 9
M Problem beim Importieren einer Datenbank Datenbankprogrammierung 3
A Problem beim Laden des Treibers Datenbankprogrammierung 5
G Problem beim einfügen in der Datenbank Datenbankprogrammierung 4
G Problem beim Schreiben eines Dateipfads in MySQL-DB Datenbankprogrammierung 9
M "SQL - Apache" Problem beim laden des Applets Datenbankprogrammierung 4
D Problem beim Zugriff auf eine Oracle-DB Datenbankprogrammierung 23
A Datenbankzugriff per Applet - Problem beim Treiber laden Datenbankprogrammierung 6
E Problem beim laden des JDBC Driver bzw der Database Datenbankprogrammierung 8
T Problem beim Update vom Resultset + Firebird Datenbankprogrammierung 2
G Problem beim Zugriff SQL 2000 Datenbankprogrammierung 2
K Problem beim Einlesen von Werten aus einem Textfeld Datenbankprogrammierung 11
E Problem beim Datenbank-Design (relational) Datenbankprogrammierung 10
J PC-Start Problem JDBC Connection Datenbankprogrammierung 10
C Problem mit Apache Poi Datenbankprogrammierung 6
N HSQLDB Problem mit Eclipselink in runnable Jar Datenbankprogrammierung 10
P GroupLayout-Problem Datenbankprogrammierung 12
F XAMPP max connections problem Datenbankprogrammierung 6
C MySQL Problem in phpMyAdmin Oberfläche Datenbankprogrammierung 5
C Problem with INSERT.............ON DUPLICATE KEY Datenbankprogrammierung 3
C Problem with insertion in database. Datenbankprogrammierung 7
F Problem mit Hibernate c3p0 Datenbankprogrammierung 2
W Problem mit Insert in zwei Tabellen Datenbankprogrammierung 8
G MySQL Problem mit MySQL verbindung Datenbankprogrammierung 8
A kleines Problem Datenbankprogrammierung 6
T Problem mit Datenbankverbindung Datenbankprogrammierung 22
V Derby/JavaDB updateRow Problem Datenbankprogrammierung 0
G MySQL Java Problem: Nullpointer Exception obwohl Daten vorhanden sind? Datenbankprogrammierung 2
Nuiton EmbeddedDriver Problem Datenbankprogrammierung 6
A MongoDB Passwort Problem Datenbankprogrammierung 0
O HSQLDB Hibernate Criteria Problem Datenbankprogrammierung 3
F MySQL JDBC Problem Datenbankprogrammierung 5
Anfänger2011 Datenbankstruktur/aufbau (theoretisches Problem) Datenbankprogrammierung 5
M Derby/JavaDB Drop Database problem Datenbankprogrammierung 3
M Derby/JavaDB NOT LIKE problem Datenbankprogrammierung 19
N HSQLDB Problem mit EntityManager Datenbankprogrammierung 7
B MySQL JPAContainer Problem Datenbankprogrammierung 4
K Eclipse Apache Derby Treiber Problem Datenbankprogrammierung 4
C Problem oder Denkfehler mit H2-Database Datenbankprogrammierung 3
E Wie kann man das Problem mit der BLOB-Spalte lösen? Datenbankprogrammierung 1
M Problem mit jcouchdb und CouchDB - UTF8 kein gültiger Zeichentyp Datenbankprogrammierung 4
T MySQL Problem mit Datenbankanbindung Datenbankprogrammierung 4
M INSERT-Problem = integrity constraint violation: foreign key no parent Datenbankprogrammierung 5
P SQL Query Problem Datenbankprogrammierung 14
A MySQL Problem bei Tabelle ausgeben Datenbankprogrammierung 3
Q MySQL JDBC-Treiber Problem Datenbankprogrammierung 2
B SQLite Problem bei Planung der Datenbank [Jeopardy] Datenbankprogrammierung 3
A Problem mit dem Import und Export von Bildern Datenbankprogrammierung 4
P Oracle Problem mit Umlauten Datenbankprogrammierung 9
A Problem mit Create-Statement Datenbankprogrammierung 9
D Problem mit COLUMN_IDENTIFIERS Datenbankprogrammierung 8
Bluedaishi MySQL Abfrage Problem :-) Datenbankprogrammierung 21
M Problem mit mehreren Datasourcen Datenbankprogrammierung 3
R Resultset.last() Problem Datenbankprogrammierung 12
M Problem GroupBy Datenbankprogrammierung 3
S CURRENT_DATE problem Datenbankprogrammierung 2
M Problem mt JPA Id-Generators Datenbankprogrammierung 18
Gossi Oracle Problem mit group by... Datenbankprogrammierung 22
M MySQL SQL Abfrage Problem Datenbankprogrammierung 6
R MS-SQL Express Login-Problem Datenbankprogrammierung 8
P Lazy-Fetchig und Session-Problem mit Hibernate Datenbankprogrammierung 4
C Hibernate ManyToMany zusammengesetzter Primärschlüssel, problem. Datenbankprogrammierung 3
M Problem mit HQL Syntax Datenbankprogrammierung 5
K Db4o Delete Problem Datenbankprogrammierung 11
Mike90 Deadlock/Lock Problem Datenbankprogrammierung 4
T Access 32bit on Win7 64Bit ODBC Problem Datenbankprogrammierung 1
C unverständliches DB Problem (Es ist kein temporärer Systemtabellenbereich mit einer ausreichenden..) Datenbankprogrammierung 5
S ODBC Treiber Problem/oder unvermögen Datenbankprogrammierung 18
J Problem bei Boolean in PreparedStatement Datenbankprogrammierung 5
C MySQL Problem mit UPDATE Abfrage Datenbankprogrammierung 13
C Problem mit SQL-Abfrage Datenbankprogrammierung 5
K Problem mit Datenbankverbindung via Eclipse Datenbankprogrammierung 2
A Problem mit Eintragen von Daten in eine Datenbank mittels DAO Datenbankprogrammierung 4
S Oracle Problem mit PreparedStatement.setString(1,"str") Datenbankprogrammierung 10
B MySQL Problem mit Datenbankanbindung an MySQL Datenbankprogrammierung 2
N Problem bei Erstellung eines Index Datenbankprogrammierung 12
C Hibernate Property-Problem Datenbankprogrammierung 5
J MyBatis - Update Problem Datenbankprogrammierung 4
S JPA: Problem mit Update von Daten Datenbankprogrammierung 7
c_sidi90 Hibernate Problem Table doesnt excist Datenbankprogrammierung 8
M Problem mit JPA - OneToMany-Relation Datenbankprogrammierung 3
I Hibernate: Composite Foreign Key Problem Datenbankprogrammierung 14
S JPA OptimisticLocking Problem Datenbankprogrammierung 11
I Derby/JavaDB Problem mit Befüllung von Tabelle Datenbankprogrammierung 7
JavaKaffee Derby/JavaDB Quartz-WebAnwendung - Connection/Treiber Problem Datenbankprogrammierung 47
I Problem mit ResultSet Datenbankprogrammierung 2
L Excel in MySQL importieren Problem Datenbankprogrammierung 5
R MS Access mit Java Problem mit Update Statment Datenbankprogrammierung 13
S MySQL Problem mit SELECT bzw encoding Datenbankprogrammierung 4
M MySQL getConnection - Verbindung Problem Datenbankprogrammierung 2
K Hibernate + MySQL Problem... Datenbankprogrammierung 2
I MySQL MySQL – Proxy Problem Datenbankprogrammierung 4
M Problem mit Hibernate und Named Query Datenbankprogrammierung 1
M Problem mit Hibernate und Access Datenbankprogrammierung 9

Ähnliche Java Themen

Neue Themen


Oben