Heath Thomann created OPENJPA-2534:
--------------------------------------

             Summary: A boolean is not converted correct when using the hint 
'UseLiteralInSQL'.
                 Key: OPENJPA-2534
                 URL: https://issues.apache.org/jira/browse/OPENJPA-2534
             Project: OpenJPA
          Issue Type: Bug
          Components: sql
    Affects Versions: 2.1.2, 2.2.1.1, 2.2.3, 2.3.1, 2.4.0
            Reporter: Heath Thomann
            Priority: Critical


The hint, 'openjpa.hint.UseLiteralInSQL', is not properly converting a boolean 
to an int.  To illustrate this, lets take this entity:

public class MyEntity implements Serializable {
 @Id
 private Integer pk;

 private boolean flag;
..........


With this entity, lets take this test:

Query q = em.createQuery("SELECT f FROM MyEntity f WHERE f.flag = true");
q.setHint("openjpa.hint.UseLiteralInSQL", "false");  //false is the default
q.getResultList();


With this code, the following SQL will be generated:

SELECT t0.pk, t0.code, t0.code2, t0.flag FROM MyEntity t0 WHERE (t0.flag = ?)  
[params=(int) 1]


Next, lets take this code:

Query q = em.createQuery("SELECT f FROM MyEntity f WHERE f.flag = true");
q.setHint("openjpa.hint.UseLiteralInSQL", "true");
q.getResultList();


With this code, the following SQL will be generated:

SELECT t0.pk, t0.code, t0.code2, t0.flag FROM MyEntity t0 WHERE (t0.flag = true)


However, in the latter case where UseLiteralInSQL=true, the following SQL 
should be generated:

SELECT t0.pk, t0.code, t0.code2, t0.flag FROM MyEntity t0 WHERE (t0.flag = '1')

Thanks,

Heath



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to