Will Dazey created OPENJPA-2901: ----------------------------------- Summary: 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.1.2, 3.0.0 Reporter: Will Dazey
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.1#820001)