[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