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