hi bradford,

delete by query is using pure sql and works 'outside' ojb.
ojb does not know which objects are deleted, that's why you have to clear the cache manually afterwards.


hth
jakob

Bradford Pielech wrote:

Hello again:

I am writing some JUnit tests now and as part of the setup, I want to make sure the DB is empty, so I wrote a method to delete all relevant objects and their related objects:

----------------
public boolean deleteAllObjects(String classNameOfObject) {
boolean returnValue = true;
Class exampleClass = Class.forName(classNameOfObject);
Query query = QueryFactory.newQuery(exampleClass,
QueryByCriteria.CRITERIA_SELECT_ALL);
PersistenceBroker pbroker = PersistenceBrokerFactory.
defaultPersistenceBroker();
pbroker.beginTransaction();
pbroker.deleteByQuery(query);
pbroker.commitTransaction();
}
-------------------


However, when I run this, only the objects from the Primary class are deleted (see below) and not any associated ReferencedObjects. This was confirmed by looking at the p6spy logI changed the code to deleteAll by first retrieving all objects of the type and then calling delete on each:

----------
public boolean deleteAllObjects(String classNameOfObject) {
PersistenceBroker pbroker = PersistenceBrokerFactory.defaultPersistenceBroker();
try {
List objects = getObjectsOfType(classNameOfObject); //uses getCollectionByQuery and CRITERIA_SELECT_ALL
pbroker.beginTransaction();
for (Iterator i = objects.iterator(); i.hasNext(); ) {
pbroker.delete(i.next());
}
pbroker.deleteByQuery(query);
pbroker.commitTransaction();
------------


And this version successfully deleted all objects and their associations (again confirmed by p6spy). Now I know the mapping file is correct, otherwise the 2nd version would have failed. I included relevant sections of it below, just in case.

Any ideas what I am doing wrong?

thanks,
Brad

--------------------
<class-descriptor
    class="PrimaryClass"
    table="table1"
 >
<reference-descriptor
        name="tasks"
        class-ref="ReferencedClass"
        refresh="true"
        auto-retrieve="true"
        auto-update="true"
        auto-delete="object"
    >
        <foreignkey field-ref="fk_id"/>
<field-descriptor
        name="fk_id"
        column="fk_id"
        jdbc-type="VARCHAR"
        length="35"
    >
</class-descriptor>

<class-descriptor
    class="ReferencedClass"
    table="table2"
 >
    <field-descriptor
        name="ID"
        column="pk_id"
        jdbc-type="VARCHAR"
        primarykey="true"
        length="35"
    >
</class-descriptor>





---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to