You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ojb-user@db.apache.org by Bradford Pielech <br...@alphatech.com> on 2004/06/16 17:49:33 UTC

Manual Link and Unlink question

Hello:

	This is a follow on to my question from last week where I have a graph 
structure where each graph node has a list of parents and children.  I was 
trying to use the auto-update=object and auto-delete=object features, but 
it was not working well in my particular scenario (meaning there were not 
any bugs in OJB) so I am investigating switching to auto-update and 
auto-delete = none and linking / unlinking on my own.

	So here is my question: if I have object A and object B already stored in 
the database, how can I create or delete an M to N link between them in 
their indirection table? I know that the BrokerHelper link and unlink 
methods are the way to go, but I cannot see how to use it because, to me, 
it looks like you can only specify 1 side of the link.

	Here is some rough sample code of what I want to do:
-----------
	PersistenceBroker pbroker = 
PersistenceBrokerFactory.defaultPersistenceBroker();
	pbroker.beginTransaction();
	pbroker.store(a);
	pbroker.commitTransaction();

	//then some time later
	pbroker.beginTransaction();
	pbroker.store(a);
	pbroker.commitTransaction();

	//and finally even later
	pbroker.serviceBrokerHelper().link(a,b); //I know this method doesn't 
exist, but this is what I want to do.
	//  or
	pbroker.serviceBrokerHelper().unlink(a,b);
-------------

Here is what the repository file for the DAGNode looks like:

<collection-descriptor
         name="children"
         element-class-ref="DAGNode"
         indirection-table="parent_children_table"
         auto-retrieve="true"
         auto-update="none"
         auto-delete="none"
     >
         <fk-pointing-to-this-class column="parent_id"/>
         <fk-pointing-to-element-class column="child_id"/>
     </collection-descriptor>
     <collection-descriptor
         name="parents"
         element-class-ref="DAGNode"
         indirection-table="parent_children_table"
         auto-retrieve="true"
         auto-update="none"
         auto-delete="none"
     >
         <fk-pointing-to-this-class column="child_id"/>
         <fk-pointing-to-element-class column="parent_id"/>


thank you!
Brad






---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org


Re: Manual Link and Unlink question

Posted by Armin Waibel <ar...@apache.org>.
Hi Brad,

Bradford Pielech wrote:

> Hello:
> 
>     This is a follow on to my question from last week where I have a 
> graph structure where each graph node has a list of parents and 
> children.  I was trying to use the auto-update=object and 
> auto-delete=object features, but it was not working well in my 
> particular scenario (meaning there were not any bugs in OJB) so I am 
> investigating switching to auto-update and auto-delete = none and 
> linking / unlinking on my own.
> 
>     So here is my question: if I have object A and object B already 
> stored in the database, how can I create or delete an M to N link 
> between them in their indirection table? I know that the BrokerHelper 
> link and unlink methods are the way to go, but I cannot see how to use 
> it because, to me, it looks like you can only specify 1 side of the link.

If you specify one side of the link this should be enough, because in 
indirection table the FK of both objects are inserted - or I'm missing 
something?
For example:
A, B already existing.
// declare relation
A.addBs(B)
broker.beginTx
broker.serviceBrokerHelper().link(A);
broker.commitTx

After this in indirection table the m:n relation between A and B should 
be stored.

If you now call
broker.retrieveAllReferences(B)
Collection result = B.getAs()
B now should contain A

There is a test case in test suite ([db-ojb/src/test]) called 
org.apache.ojb.broker.M2NTest handle with m:n relation (automatic store 
and custom store with linking)

regards,
Armin

> 
>     Here is some rough sample code of what I want to do:
> -----------
>     PersistenceBroker pbroker = 
> PersistenceBrokerFactory.defaultPersistenceBroker();
>     pbroker.beginTransaction();
>     pbroker.store(a);
>     pbroker.commitTransaction();
> 
>     //then some time later
>     pbroker.beginTransaction();
>     pbroker.store(a);
>     pbroker.commitTransaction();
> 
>     //and finally even later
>     pbroker.serviceBrokerHelper().link(a,b); //I know this method 
> doesn't exist, but this is what I want to do.
>     //  or
>     pbroker.serviceBrokerHelper().unlink(a,b);
> -------------
> 
> Here is what the repository file for the DAGNode looks like:
> 
> <collection-descriptor
>         name="children"
>         element-class-ref="DAGNode"
>         indirection-table="parent_children_table"
>         auto-retrieve="true"
>         auto-update="none"
>         auto-delete="none"
>     >
>         <fk-pointing-to-this-class column="parent_id"/>
>         <fk-pointing-to-element-class column="child_id"/>
>     </collection-descriptor>
>     <collection-descriptor
>         name="parents"
>         element-class-ref="DAGNode"
>         indirection-table="parent_children_table"
>         auto-retrieve="true"
>         auto-update="none"
>         auto-delete="none"
>     >
>         <fk-pointing-to-this-class column="child_id"/>
>         <fk-pointing-to-element-class column="parent_id"/>
> 
> 
> thank you!
> Brad
> 
> 
> 
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
> For additional commands, e-mail: ojb-user-help@db.apache.org
> 
> 
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org