Hi Nga,

> When debugging, I noticed that in the method the method "storeCollections"
> in PersistenceBrokerImpl.class, cod.getCascadingStore() returns
> "CASCADE_LINK" and not "CASCADE_NONE"


This is the intended behaviour. To be backward compatible auto-udate 'false' was set to 'CASCADE_LINK', see more

http://db.apache.org/ojb/tutorial3.html#1:n%20auto-xxx%20setting

You don't specify the used api (PB-api, ODMG-api). If you are using ODMG this behaviour is intended. ODMG-api is not so flexible as the PB-api.

If you want to keep the object of a 1:n relation in DB without the FK to main object you have to do it by hand.

regards,
Armin

Nga Duong wrote:
Hi,

I'm having the same problem except that I have a 1:m relationship.

        /**
         * @ojb.collection
element-class-ref="com.model.product.ShadowProduct"
         *              foreignkey="formNo"
         *                      auto-update="false"
         *                      auto-delete="false"
         */
        private Collection shadowProducts = new RemovalAwareCollection();

I'm also using db-ojb-1.0.rc6 and even though I explicitly specified
auto-update=false auto-delete=false, the collection is being deleted.
When debugging, I noticed that in the method the method "storeCollections"
in PersistenceBrokerImpl.class, cod.getCascadingStore() returns
"CASCADE_LINK" and not "CASCADE_NONE", hence afterStore is being executed.

            if(cod.getCascadingStore() != CollectionDescriptor.CASCADE_NONE)
            {
                Object referencedObjects =
cod.getPersistentField().get(obj);
                if(cod.isMtoNRelation())
                {
                    storeAndLinkMtoN(false, obj, cod, referencedObjects,
insert);
                }
                else
                {
                    storeAndLinkOneToMany(false, obj, cod,
referencedObjects, insert);
                }
                // invoke callback on collection
                if (referencedObjects instanceof ManageableCollection)
                {
                    ((ManageableCollection)
referencedObjects).afterStore(this);
                }
            }

I also tried to get the latest source code from CVS and built it. But the
problem remains. Any idea?

Thanks

Nga
-----Original Message-----
From: Emmanuel Mascarenas [mailto:[EMAIL PROTECTED]
Sent: Wednesday, 5 May 2004 9:06 AM
To: [EMAIL PROTECTED]
Subject: N:M relations problem/question -> unwanted deletions


Hi Armin,


I'm using db-ojb-1.0.rc6 and I change the collection-class as you write,
but it still deteting the object, I'm also change the auto-update and
auto-delete with every possible value (true,fasle,none)
and this not chage the result.

Object code:

  /** @ojb.collection
   *
collection-class="org.apache.ojb.broker.util.collections.ManageableArrayList
"
   *    element-class-ref="model.security.Role"
   *    foreignkey="user_id"
   *    remote-foreignkey="role_id"
   *    indirection-table="sc_user_role"
   *    auto-retrieve="true"
   *    auto-update="true"
   */
  protected Collection roles;


public void removeRole(Role role){ roles.remove(role); }


repository_user.xml


<collection-descriptor
name="rols"
collection-class="org.apache.ojb.broker.util.collections.ManageableArrayList
"
element-class-ref="model.security.Role"
indirection-table="sc_user_role"
auto-retrieve="true"
auto-update="true">
<fk-pointing-to-this-class column="user_id"/>
<fk-pointing-to-element-class column="role_id"/>
</collection-descriptor>



the removal code:


  try {
    Transaction tx = null;
    Implementation odmg = Context.getInstance().getODMG();
    tx = odmg.newTransaction();
    tx.begin();
    tx.lock(aUser,Transaction.WRITE);
    aUser.removeRole(aRole);
    tx.commit();
  }catch (Exception ex) {
    ex.printStackTrace();
  }



Thanks
Emmanuel








From: Armin Waibel <[EMAIL PROTECTED]>
Subject: N:M relations problem/question -> unwanted deletions
Content-Type: text/plain; charset=us-ascii; format=flowed

Hi Emmanuel,

don't use a removal aware collection class in your collection-descriptor. Per default OJB use such a collection to detect all removed objects from your 1:n collection.
So try to set



collection-class="org.apache.ojb.broker.util.collections.ManageableArrayList "

in your collection-descriptor.

regards,
Armin

Emmanuel Mascarenas wrote:


I have a simple n:m relation:

user *..* rol

I brake this with a middle table

user 1..* user_rol *..1 rol

Everything is fine, the problem is when a delete a rol from the rol
user's collection, the rol it self is deleted and I want to keep it.

Here es the code on user:

 /** @ojb.collection
  *    element-class-ref="model.security.Rol"
  *    auto-retrieve="true"
  *    auto-update="true"
  *    foreignkey="user_id"
  *    remote-foreignkey="rol_id"
  *    indirection-table="user_rol"
  */
 protected Collection roles;

Here es the auto generated code on repository_user.xml

<collection-descriptor
       name="roles"
       element-class-ref="model.security.Rol"
       indirection-table="user_rol"
       auto-retrieve="true"
       auto-update="true"

       <fk-pointing-to-this-class column="user_id"/>
       <fk-pointing-to-element-class column="rol_id"/>
</collection-descriptor>


Thanks all in advance Emmanuel





--------------------------------------------------------------------- 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]




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



Reply via email to