[hibernate-issues] [Hibernate-JIRA] Commented: (EJB-365) Can't execute query

Aleksandras Novikovas (JIRA) noreply at atlassian.com
Tue Jul 22 20:34:12 EDT 2008


    [ http://opensource.atlassian.com/projects/hibernate/browse/EJB-365?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_30712 ] 

Aleksandras Novikovas commented on EJB-365:
-------------------------------------------

Hi,

I've got exactly the same problem.

After digging for a few hours in the PostgreSQL JDBC and Hibernate sources I have to admit that it is neither Hibernate nor PostgreSQL JDBC problem. It is a shortcoming of JPA. Hibernate can detect and pass correct parameter type to JDBC when parameter has real value. When you pass null - there is no possibility to determine parameter type and Hibernate falls back to Hibernate.SERIALIZABLE which in turn translates into bytea (in PostgreSQL JDBC).

Only workaround I've found is: get Hibernate query implementation and set parameter with exact type.

javax.persistence.Query q = em.createNamedQuery ("MyNamedQuery");
org.hibernate.Query hq = ((org.hibernate.ejb.HibernateQuery) q).getHibernateQuery ();
hq.setParameter ("param", param, Hibernate.BOOLEAN);

Regards,
Alius


> Can't execute query
> -------------------
>
>                 Key: EJB-365
>                 URL: http://opensource.atlassian.com/projects/hibernate/browse/EJB-365
>             Project: Hibernate Entity Manager
>          Issue Type: Bug
>    Affects Versions: 3.3.2.GA
>         Environment: Hibernate 3.2.6
> PostrgreSQL 8.0.13
> Glassfish
>            Reporter: Radosław Smogura
>            Priority: Critical
>
> Execution followed named query with followed entity
> @Entity
> @NamedQuery(name="Foo.test",
> query="SELECT f FROM Foo f WHERE ((:bool IS NULL) OR (f.bool = :bool)) ")
> public class Foo implements Serializable{
>     @Id
>     int id;
>     
>     
>     boolean bool;
>     public boolean isBool() {
>         return bool;
>     }
>     public void setBool(boolean bool) {
>         this.bool = bool;
>     }
>     public int getId() {
>         return id;
>     }
>     public void setId(int id) {
>         this.id = id;
>     }   
> }
> and parameter bool = null
> causes PostgreSQL error ERROR: operator does not exist: boolean = bytea

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

       




More information about the hibernate-issues mailing list