You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by "Will Dazey (Jira)" <ji...@apache.org> on 2022/03/15 19:57:00 UTC
[jira] [Comment Edited] (OPENJPA-2901) Regression in CriteriaBuilder ParameterExpression behavior
[ https://issues.apache.org/jira/browse/OPENJPA-2901?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17507196#comment-17507196 ]
Will Dazey edited comment on OPENJPA-2901 at 3/15/22, 7:56 PM:
---------------------------------------------------------------
It seems this may be a duplicate of https://issues.apache.org/jira/browse/OPENJPA-2788. If so, please close this issue as such. Thanks you.
was (Author: dazeydev):
It seems this may be a duplicate of https://issues.apache.org/jira/browse/OPENJPA-2788
> 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.1#820001)