[ 
https://issues.apache.org/jira/browse/OPENJPA-2901?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Maxim Solodovnik resolved OPENJPA-2901.
---------------------------------------
    Resolution: Information Provided

> Regression in CriteriaBuilder ParameterExpression behavior
> ----------------------------------------------------------
>
>                 Key: OPENJPA-2901
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-2901
>             Project: OpenJPA
>          Issue Type: Bug
>    Affects Versions: 3.0.0, 3.1.2
>            Reporter: Will Dazey
>            Priority: Minor
>
> I was testing OpenJPA for CriteriaBuilder and I noticed a regression in 
> behavior when setting ParameterExpressions
> Entity:
> ```
> @Entity
> public class SimpleEntity {
>     @Id @Column(name = "KEY_CHAR")
>     private String KeyString;
>     @Column(name = "ITEM_STRING1")
>     private String itemString1;
>     @Column(name = "ITEM_STRING2")
>     private String itemString2;
>     @Column(name = "ITEM_STRING3")
>     private String itemString3;
>     @Column(name = "ITEM_STRING4")
>     private String itemString4;
>     @Column(name = "ITEM_INTEGER1")
>     private Integer itemInteger1;
> ```
> Test:
> ```
>     CriteriaBuilder cb = em.getCriteriaBuilder();
>     CriteriaQuery<SimpleEntity> cquery = cb.createQuery(SimpleEntity.class);
>     Root<SimpleEntity> root = cquery.from(SimpleEntity.class);
>     cquery.select(root);
>     ParameterExpression<String> strValue1 = cb.parameter(String.class);
>     ParameterExpression<String> strValue2 = cb.parameter(String.class);
>     ParameterExpression<String> strValue3 = cb.parameter(String.class);
>     ParameterExpression<String> strValue4 = cb.parameter(String.class);
>     cquery.where(root.get(SimpleEntity_.itemString1).in(strValue1, strValue2, 
> strValue3, strValue4));
>     query = em.createQuery(cquery);
>     query.setParameter(strValue1, "HELLO");
>     query.setParameter(strValue2, "ONE");
>     query.setParameter(strValue3, "WORLD");
>     query.setParameter(strValue4, "PEOPLE");
> ```
> 3.0.0 SQL Trace:
> ```
> openjpa.jdbc.SQL - <t 856624410, conn 2130397255> executing prepstmnt 
> 1876167186 
> SELECT t0.KEY_CHAR, t0.ITEM_INTEGER1, t0.ITEM_STRING1, t0.ITEM_STRING2, 
>         t0.ITEM_STRING3, t0.ITEM_STRING4 
>     FROM SimpleEntity t0 
>     WHERE ((t0.ITEM_STRING1 = ? OR t0.ITEM_STRING1 = ? OR t0.ITEM_STRING1 = 
>         ? OR t0.ITEM_STRING1 = ?) AND t0.ITEM_STRING1 IS NOT NULL) 
> [params=(String) HELLO, (String) ONE, (String) WORLD, (String) PEOPLE]
> ```
> 3.1.2 SQL Trace:
> ```
> openjpa.jdbc.SQL - <t 613066919, conn 661502036> executing prepstmnt 
> 1987058658 
> SELECT t0.KEY_CHAR, t0.ITEM_INTEGER1, t0.ITEM_STRING1, t0.ITEM_STRING2, 
>         t0.ITEM_STRING3, t0.ITEM_STRING4 
>     FROM SimpleEntity t0 
>     WHERE ((t0.ITEM_STRING1 = ? OR t0.ITEM_STRING1 = ? OR t0.ITEM_STRING1 = 
>         ? OR t0.ITEM_STRING1 = ?) AND t0.ITEM_STRING1 IS NOT NULL) 
> [params=(String) HELLO, (String) HELLO, (String) HELLO, (String) HELLO]
> ```
> I have not tested against the latest 3.2.1 binary yet, so I don't know if 
> this was fixed in the latest 3.2.x, but the latest 3.1.x does contain this 
> issue. I will test 3.2.x next.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to