Implementation odmg = OJB.getInstance();
Database db = odmg.newDatabase();
db.open(TestHelper.DEF_DATABASE_NAME, Database.OPEN_READ_WRITE);
TransactionExt tx = (TransactionExt) odmg.newTransaction();
tx.begin();
db.makePersistent(s_ref_4);
db.makePersistent(obj_2);
tx.commit();
tx.begin();
// try to find object
Criteria crit = new Criteria();
crit.addEqualTo("name", name);
QueryByCriteria query = QueryFactory.newQuery(MainObject.class, crit);
int result = tx.getBroker().getCount(query);
assertEquals("Wrong object count", 1, result);
// pk have to set and have to be different
assertNotNull(obj_2.getIdentifier());
assertTrue(obj_2.getIdentifier().longValue() > 0);
// no collection reference set
List references = obj_2.getAllReferences();
assertTrue(references == null || references.size() == 0);
// get Identity objects
Identity oid_2 = tx.getBroker().serviceIdentity().buildIdentity(obj_2);
// get identifier (PK) values
Long id_2 = obj_2.getIdentifier();
tx.getBroker().clearCache();
obj_2 = (MainObject) tx.getBroker().getObjectByIdentity(oid_2);
assertTrue(obj_2.getIdentifier().longValue() > 0);
assertNotNull(obj_2.getSingleReference());
assertTrue(obj_2.getSingleReference().getId().longValue() > 0);
// no collection reference set
references = obj_2.getAllReferences();
assertTrue(references == null || references.size() == 0);
tx.getBroker().clearCache();
// get references only
Criteria crit_2 = new Criteria();
crit_2.addEqualTo("refName", nameRef);
QueryByCriteria query_2 = QueryFactory.newQuery(CollectionReference.class, crit_2);
int result_2 = tx.getBroker().getCount(query_2);
assertEquals(0, result_2);
tx.getBroker().clearCache();
// get object
MainObject retObj = (MainObject) tx.getBroker().getObjectByIdentity(oid_2);
List refList = retObj.getAllReferences();
assertNotNull(refList);
assertEquals("object do not have references", 0, refList.size());
tx.commit();
// add new reference to object
CollectionReference ref_6 = new CollectionReference(null, "###_new_" + nameRef);
tx.begin();
tx.lock(obj_2, Transaction.WRITE);
obj_2.addReference(ref_6);
tx.commit();
references = obj_2.getAllReferences();
assertNotNull(references);
assertEquals("1 references expected for object: "+obj_2, 1, references.size());
assertNotNull(ref_6.getRefIdentifier());
// check FK setting
Long fk = ref_6.getFkIdentifier();
assertNotNull(fk);
assertEquals(obj_2.getIdentifier(), fk);
assertEquals(id_2, obj_2.getIdentifier());
references = obj_2.getAllReferences();
assertNotNull(references);
assertEquals("1 references expected for object: "+obj_2, 1, references.size());
assertNotNull(references);
tx.begin();
obj_2 = (MainObject) tx.getBroker().getObjectByIdentity(oid_2);
// we don't change the main object, only add an reference, so the
// cached version of the object isn't up to date
tx.getBroker().retrieveAllReferences(obj_2);
tx.commit();
assertNotNull(obj_2);
references = obj_2.getAllReferences();
assertNotNull(references);
assertEquals("Reference expected for object", 1, references.size());
assertEquals(id_2, obj_2.getIdentifier());
// now update main objects
tx.begin();
tx.lock(obj_2, Transaction.WRITE);
obj_2.setName(name+"_update");
tx.commit();
broker = PersistenceBrokerFactory.defaultPersistenceBroker();
obj_2 = (MainObject) broker.getObjectByIdentity(oid_2);
broker.close();
assertNotNull(obj_2);
assertEquals(obj_2.getName(), name+"_update");
assertEquals(id_2, obj_2.getIdentifier());
broker = PersistenceBrokerFactory.defaultPersistenceBroker();
obj_2 = (MainObject) broker.getObjectByIdentity(oid_2);
broker.close();
// now update reference
assertNotNull(obj_2);
tx.begin();
tx.lock(obj_2, Transaction.WRITE);
references = obj_2.getAllReferences();
CollectionReference ref = (CollectionReference) references.get(0);
tx.lock(ref, Transaction.WRITE);
ref.setRefName(nameRef+"_update");
tx.commit();
broker = PersistenceBrokerFactory.defaultPersistenceBroker();
obj_2 = (MainObject) broker.getObjectByIdentity(oid_2);
assertNotNull(obj_2);
references = obj_2.getAllReferences();