-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 3 posts ] 
Author Message
 Post subject: Optionale Parameter in JPA-Query
PostPosted: Wed Jun 13, 2007 12:20 pm 
Newbie

Joined: Wed Jun 13, 2007 11:36 am
Posts: 5
Hallo,

ich bin auf ein Problem bei null-Parametern in JPA gestossen, für das ich bisher keine
Lösung gefunden habe.

Nehmen wir mal das folgende Beispiel einer NamedQuery
Code:

select a
  from Artikel a
where
   ...
   and (
            :artikelCode is null
         or a.code = :artikelCode
       )

Mit dem OR-Ausdruck in der Where-Clausel möchte ich den Parameter "artikelCode" optional
machen. Ist der übergebene Parameter null, werden alle Artikel gelesen, ansonsten nur
diejenigen, die den übergebenen Code haben. Die HQL-Query entspricht so ziemlich genau
dem generierten SQL Code (unter Oracle).

Ein Aufruf wie dieser hier
Code:
javax.persistence.Query query = getEntityManager().createNamedQuery(...);
query.setParameter("artikelCode", artikel.getCode()); // Gibt "null" zurück
return query.getResultList();
führt zu SQLGrammarException.

Code:
javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not execute query
...
...
Caused by: java.sql.SQLException: ORA-00932: Inkonsistente Datentypen: NUMBER erwartet, BINARY erhalten


Für mich sieht es so aus, als würde Hibernate unter JDBC statt
Code:
statement.setNull(1, Types.NUMBER);
das hier aufrufen
Code:
statement.setObject(1, null); bzw. statement.setObject(1, longObject); // wobei longObject == null ist

Das ist aber keine "gesicherte Erkenntnis", nur eine Vermutung.

Bug oder Feature? Wie geht Ihr damit um? Gibt es eine andere Lösung unter JPA, wenn man
auf das Zusammenbauen von Queries mit StringBuffer/StringBuilder etc. verzichten möchte
und stattdessen die Parameter in NamedQueries optional machen möchte?

Das da habe ich hier am Laufen
------------------------------------
App-Server: JBoss-4.0.5.GA
Hibernate Version: 3.2.1.GA
Oracle-JDBC: 10.2.0.1.0
------------------------------------

Gruß,
Michael


Top
 Profile  
 
 Post subject: Re: Optionale Parameter in JPA-Query
PostPosted: Mon Nov 02, 2009 6:18 am 
Newbie

Joined: Tue Sep 18, 2007 10:26 am
Posts: 1
Ich habe das gleiche Problem, ich kriege eine ORA-00932 wenn der Parameter null ist. Hast du die Lösung dafür gefunden?


Top
 Profile  
 
 Post subject: Re: Optionale Parameter in JPA-Query
PostPosted: Sat Jan 23, 2010 8:44 am 
Newbie

Joined: Sat Jan 23, 2010 8:38 am
Posts: 1
Bei mir funktioniert's mit

query.setParameter("artikelCode", artikel.getCode(), Hibernate.INTEGER);

(allerdings verwende ich nicht JPA sondern native hibernate...)


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 3 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.