[Java lista] JPA lekerdezes
Andras Dobrosi
andris at freemail.hu
2008. Már. 4., K, 11:48:36 CET
Szia!
Szerintem itt a gaz:
q = em.createNativeQuery(sql); //paraméterek megadása
Inkabb igy:
q = em.createQuery(sql); //paraméterek megadása
azaz:
createNativeQuery -> createQuery
Udv.,
Andris
2008/3/4 Csaba Ragasits <ragasits.csaba at gmail.com>:
> 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
> >
> _______________________________________________
> 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