Hi,

I'm having problems with TransactionImpl.markDelete(Object anObject)
regarding keys to DMAP entries as well as the DMap Impl object itself.

markDelete will sometimes not cause an sql DELETE for these objects at
transaction commit. However, the Entry object always get deleted.

The persistent key class contains a pk field and a string value field.  The
equals and hashCode methods are overridden to implement value-based
equality on the string value field only, thus ignoring the pk field.

I discovered this problem with markDelete sometime earlier and worked around
it by dropping down to the lower layer with

      sql = "DELETE FROM OJB_DMAP WHERE ID = " + ((DMapImpl)object).getId() ;
      persistenceBroker.deleteByQuery (new QueryBySQL(DMapImpl.class, sql)) ;

      sql = "DELETE FROM PSTRING WHERE ID = " + ((PersistentString)object).getID() ;
      persistenceBroker.deleteByQuery (new QueryBySQL(DMapImpl.class, sql)) ;

Now I just discovered a similar problem with TransactionImpl.lock(Object obj, 
Transaction.WRITE)
regarding persistent string keys and persistent string values.  lock will
sometimes not cause an sql INSERT at transaction commit.  The map entry objects
get inserted by the string keya and values do not.

I am explicitly calling txn.lock(obj, Transaction.WRITE) on the keys and values.
the TransactionImpl.put method only locks the key and value for REEAD.

I have verified the actual generated sql via the postgresql log.

Can anybody help?

Thanks in advance,
Mark

Reply via email to