public void update(OpenJPAStateManager sm, JDBCStore store, RowManager rm) throws SQLException { if (field.getMappedBy() != null && !_orderInsert && !_orderUpdate) return; Object obj = sm.fetchObject(field.getIndex()); ChangeTracker ct = null; if (obj instanceof Proxy) { Proxy proxy = (Proxy) obj; if (Proxies.isOwner(proxy, sm, field.getIndex())) ct = proxy.getChangeTracker(); } Column order = field.getOrderColumn(); // if no fine-grained change tracking then just delete and reinsert // if no fine-grained change tracking or if an item was removed // from an ordered collection, delete and reinsert if (ct == null || !ct.isTracking() || (order != null && !ct.getRemoved().isEmpty())) { delete(sm, store, rm); insert(sm, rm, obj); return; } // null inverse columns for deletes and update them with our oid for // inserts ClassMapping rel = field.getElementMapping().getTypeMapping(); StoreContext ctx = store.getContext(); if (field.getMappedBy() == null) { Collection rem = ct.getRemoved(); for (Iterator itr = rem.iterator(); itr.hasNext(); ) updateInverse(ctx, itr.next(), rel, rm, null, 0); } Collection add = ct.getAdded(); int seq = ct.getNextSequence(); for (Iterator itr = add.iterator(); itr.hasNext(); seq++) updateInverse(ctx, itr.next(), rel, rm, sm, seq); if (order != null) ct.setNextSequence(seq); }