OpenJPA
  1. OpenJPA
  2. OPENJPA-504

Duplicate order numbers in relationshiptable for the same List field

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: 1.1.0, 1.2.0
    • Component/s: None
    • Labels:
      None
    • Environment:
      Kodo 4.1.4

      Description

      I now and then encounter entries in the relationship tables for List fields (id, element, ordr) non-unique entries for id, ordr. (Two elements are placed on the same index in the same list). I am not sure how to reproduce this, but I do have a question regarding the code in StoreCollectionFieldStrategy.load():

      ChangeTracker ct = null;
      if (field.getTypeCode() == JavaTypes.ARRAY)
      coll = new ArrayList();
      else

      { coll = sm.newProxy(field.getIndex()); if (coll instanceof Proxy) ct = ((Proxy) coll).getChangeTracker(); }

      // load values
      Result res = union.execute(store, fetch);
      try {
      int seq = 0;
      while (res.next())

      { if (ct != null && field.getOrderColumn() != null) seq = res.getInt(field.getOrderColumn()); add(store, coll, loadElement(sm, store, fetch, res, resJoins[res.indexOf()])); }

      if (ct != null && field.getOrderColumn() != null)
      ct.setNextSequence(seq + 1);
      } finally

      { res.close(); }

      If I am not mistaken, this initializes the changetracker for list fields for persistent objects loaded from the database with an empty list attribute (res.next() = false) with order number of "1", whereas objects with non-empty List fields which are persisted start with an order number of "0". Could this be the reason that I now and then encounter duplicate entries in the relationship table with ordernr "1"? Actually this is also the reason why encounter duplicates for other numbers, since order number is zero based (next sequence number is initialized to size()), but as described, some lists start counting from "1".

      kind regards,
      Christiaan

        Activity

        Christiaan created issue -
        Christiaan made changes -
        Field Original Value New Value
        Description I now and then encounter entries in the relationship tables for List fields (id, element, ordr) non-unique entries for id, ordr. (Two elements are placed on the same index in the same list). I am not sure how to reproduce this, but I do have a question regarding the code in StoreCollectionFieldStrategy.load():

        ChangeTracker ct = null;
                if (field.getTypeCode() == JavaTypes.ARRAY)
                    coll = new ArrayList();
                else {
                    coll = sm.newProxy(field.getIndex());
                    if (coll instanceof Proxy)
                        ct = ((Proxy) coll).getChangeTracker();
                }

                // load values
                Result res = union.execute(store, fetch);
                try {
                    int seq = 0;
                    while (res.next()) {
                        if (ct != null && field.getOrderColumn() != null)
                            seq = res.getInt(field.getOrderColumn());
                        add(store, coll, loadElement(sm, store, fetch, res,
                            resJoins[res.indexOf()]));
                    }
                    if (ct != null && field.getOrderColumn() != null)
                        ct.setNextSequence(seq + 1);
                } finally {
                    res.close();
                }

        If I am not mistaken, this initializes the changetracker for list fields for persistent objects loaded from the database with an empty list attribute (res.next() = false) with order number of "1", whereas objects with non-empty List fields which are persisted start with an order number of "0". Could this be the reason that I now and then encounter duplicate entries in the relationship table with ordernr "1"?

        kind regards,
        Christiaan
        I now and then encounter entries in the relationship tables for List fields (id, element, ordr) non-unique entries for id, ordr. (Two elements are placed on the same index in the same list). I am not sure how to reproduce this, but I do have a question regarding the code in StoreCollectionFieldStrategy.load():

        ChangeTracker ct = null;
                if (field.getTypeCode() == JavaTypes.ARRAY)
                    coll = new ArrayList();
                else {
                    coll = sm.newProxy(field.getIndex());
                    if (coll instanceof Proxy)
                        ct = ((Proxy) coll).getChangeTracker();
                }

                // load values
                Result res = union.execute(store, fetch);
                try {
                    int seq = 0;
                    while (res.next()) {
                        if (ct != null && field.getOrderColumn() != null)
                            seq = res.getInt(field.getOrderColumn());
                        add(store, coll, loadElement(sm, store, fetch, res,
                            resJoins[res.indexOf()]));
                    }
                    if (ct != null && field.getOrderColumn() != null)
                        ct.setNextSequence(seq + 1);
                } finally {
                    res.close();
                }

        If I am not mistaken, this initializes the changetracker for list fields for persistent objects loaded from the database with an empty list attribute (res.next() = false) with order number of "1", whereas objects with non-empty List fields which are persisted start with an order number of "0". Could this be the reason that I now and then encounter duplicate entries in the relationship table with ordernr "1"? Actually this is also the reason why encounter duplicates for other numbers, since order number is zero based (next sequence number is initialized to size()), but as described, some lists start counting from "1".

        kind regards,
        Christiaan
        Christiaan made changes -
        Resolution Fixed [ 1 ]
        Fix Version/s 1.1.0 [ 12312344 ]
        Status Open [ 1 ] Resolved [ 5 ]
        Fix Version/s 1.2.0 [ 12313102 ]
        Donald Woods made changes -
        Status Resolved [ 5 ] Closed [ 6 ]

          People

          • Assignee:
            Unassigned
            Reporter:
            Christiaan
          • Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development