[Java lista] JPA lekerdezes

Csaba Ragasits ragasits.csaba at gmail.com
2008. Már. 4., K, 11:20:27 CET


Ledebuggoltam újra, nem adok null értéket át paraméterként.

A teljes kód:

    public Grawe[] getGrawe(Arfolyam a, Fiok f, Dolgozo d) {
        EntityManager em = getEntityManager();
        String sql = "SELECT g FROM Grawe g ";
        Query q = null;
        Boolean where = true;
        try {
            if (a == null && f == null && d == null) {
                //Az összes elem megjelnítése
                q = em.createQuery(sql);
            } else {
                if (f != null) {
                    if (where) {
                        sql = sql + "WHERE g.fiokId.id = :fid ";
                        where = false;
                    } else {
                        sql = sql + "AND g.fiokId.id = :fid ";
                    }
                }
                if (a != null) {
                    if (where) {
                        sql = sql + "WHERE g.arfolyamId.id = :aid ";
                        where = false;
                    } else {
                        sql = sql + "AND g.arfolyamId.id = :aid ";
                    }
                }
                if (d != null) {
                    if (where) {
                        sql = sql + "WHERE g.dolgozoId.id = :did ";
                        where = false;
                    } else {
                        sql = sql + "AND g.dolgozoId.id = :did ";
                    }
                }

                q = em.createNativeQuery(sql);    //paraméterek megadása
                if (a != null) {
                    q.setParameter("aid", a.getId());
                }
                if (f != null) {
                    q.setParameter("fid", f.getId());
                }
                if (d != null) {
                    q.setParameter("did", d.getId());
                }
            }
            return (Grawe[]) q.getResultList().toArray(new Grawe[0]);
        } finally {
            em.close();
        }
    }


2008/3/4, Peter Verhas <peter at verhas.com>:
> Valamelyik parametered null?
>  Verhás Péter
>  +36(30)9306805
>  peter at verhas.com
>
>
>
>  -----Original Message-----
>  From: "Csaba Ragasits" <ragasits.csaba at gmail.com>
>  Date: Tue, 4 Mar 2008 10:24:38
>  To:javalist <javalist at javagrund.hu>
>  Subject: [Java lista] JPA lekerdezes
>
>  Hello,
>
>  Próbálok dinamikusan összerakni egy JPQL-es lekérdezést (Netbeans,
>  Glassfish, Derby), ahol az alábbi érdekes problémába futottam bele:
>
>  Ha az összerakott lekérdezés csak egy paramétert tartalmaz (SELECT g
>  FROM Grawe g WHERE g.fiokId.id = :fid), akkor a lekérdezés jól
>  működik.
>
>  Amennyiben 2 vagy több paramétert próbálok belerakni a lekérdezésbe,
>  akkor a következő hibaüzenetet kapom:
>
>  Internal Exception: java.sql.SQLSyntaxErrorException: Syntax error:
>  Encountered ":" at line 1, column 43.
>  Error Code: -1
>  Call: SELECT g FROM Grawe g WHERE g.fiokId.id = :fid AND g.arfolyamId.id = :aid
>  Query: DataReadQuery()
>  Exception [TOPLINK-4002] (Oracle TopLink Essentials - 2.0 (Build
>  b58g-fcs (09/07/2007))):
>  oracle.toplink.essentials.exceptions.DatabaseException
>  Internal Exception: java.sql.SQLSyntaxErrorException: Syntax error:
>  Encountered ":" at line 1, column 43.
>  Error Code: -1
>
>  Az összeállított lekérdezést a következő képpen hívom meg:
>
>  q = em.createNativeQuery(sql);    //paraméterek megadása
>  if (a != null) q.setParameter("aid", a.getId());
>  if (f != null) q.setParameter("fid", f.getId());
>  if (d != null) q.setParameter("did", d.getId());
>  return (Grawe[]) q.getResultList().toArray(new Grawe[0]);
>
>  Találkozott már valaki hasonló problémával?
>  Már napok óta küzdök vele, de nem nagyon tudok rájönni a hiba okára.
>
>  Thx,
>  Csaba
>
> _______________________________________________
>  Javalist mailing list
>  Javalist at javagrund.hu
>  http://javagrund.hu/mailman/listinfo/javalist
>
>  _______________________________________________
>  Javalist mailing list
>  Javalist at javagrund.hu
>  http://javagrund.hu/mailman/listinfo/javalist
>


További információk a(z) Javalist levelezőlistáról