OpenJPA
  1. OpenJPA
  2. OPENJPA-590

The push-down sql for JPQL has unpredictable ordering in the set clause for update statement

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: 1.2.0
    • Component/s: None
    • Labels:
      None

      Description

      Our application requires the push-down sql from named/dynamic query be the same each time a same JPQL is executed.
      In the following JPQL example, however,

      query="UPDATE BasicA t set t.name= ?1, t.age = ?2 WHERE t.id = ?3"

      we observe that two different push-down sql could be generated:

      UPDATE PDQBasicA t0 SET name = ?, age = ? WHERE (t0.id = ?)

      UPDATE PDQBasicA t0 SET age = ?, name = ? WHERE (t0.id = ?)

      This unpredictable behavior breaks our application. The indeterministic ordering of the update list is due to the indeterministic ordering provided by HashMap and HashSet in QueryExpressions and JPQLExpressionBuilder, respectively.

      When the HashMap is changed to LinkedHashMap and HashSet to LinkedHashSet, the access order based on insertion will be preserved and the generated push-down sql will have predictable ordering of update list. The attached patch fixes this problem.

        Activity

        Fay Wang created issue -
        Fay Wang made changes -
        Field Original Value New Value
        Attachment openjpa.patch [ 12381385 ]
        Michael Dick made changes -
        Assignee Michael Dick [ mikedd ]
        Michael Dick made changes -
        Resolution Fixed [ 1 ]
        Fix Version/s 1.2.0 [ 12313102 ]
        Status Open [ 1 ] Resolved [ 5 ]
        Donald Woods made changes -
        Status Resolved [ 5 ] Closed [ 6 ]

          People

          • Assignee:
            Michael Dick
            Reporter:
            Fay Wang
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development