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