Christiaan created OPENJPA-2455:
-----------------------------------

             Summary: Wrong sequence number in ORDR column for collections
                 Key: OPENJPA-2455
                 URL: https://issues.apache.org/jira/browse/OPENJPA-2455
             Project: OpenJPA
          Issue Type: Bug
    Affects Versions: 2.2.2
            Reporter: Christiaan


I had the following scenario
- Add 4 objects to a List
- Delete first 3
- Evict List
- Add number 5
- Reload collection, number 5 appears before item 4

Cause:
In StoreCollectionFieldStrategy.loadEagerJoin() the sequence number is not 
always set to the max value of current ordr numbers, so it will be wrongly 
initialized with the size of the collection. So in above scenario, number 5 
gets index 1. 

This part of the code is not executed, since ref is not null:
 // extract the owner id value
            ref = getNextRef(ownerMapping, store, res, ref, refJoins);
            if (ref == null) {
                // if the old coll was an ordered tracking proxy, set
                // its seq value to the last order val we read
                if (seq != 0 && coll instanceof Proxy)
                    ((Proxy) coll).getChangeTracker().setNextSequence(seq);
                if (i != 0)
                    res.pushBack();
                break;
            }

At the end of the list this is executed, so the sequence number is never set.
            if (!res.next() || res.indexOf() != typeIdx) {
                res.pushBack();
                break;
            }

Solution:
Add following code at end of method (Similar to Load())

        if ((coll instanceof Proxy) && 
            ((Proxy) coll).getChangeTracker() != null && 
(field.getOrderColumn() != null)) {
            ((Proxy) coll).getChangeTracker().setNextSequence(seq);
        }



--
This message was sent by Atlassian JIRA
(v6.1#6144)

Reply via email to