EJB relationship 2004-03-25 - By Harkness, David
Back Ricardo de Souza Moura wrote: > Maybe I hadn't gotten to do a explanation very well about my problem. > > If I want to add a B to A I will need to do something like > below, won't I ? > > 1) A a = home.findByPrimaryKey(x); > 2) Collection bs = a.getBs(); ==============> The problem is here > 3) B b = home2.findByPrimaryKey(y); > 4) bs.add(b); > > When the line 2 is executed, the EJBContainer load ALL Bs of > A to the Collection bs, isn't it ? So, imagine if I have > 1000000 of Bs. This will be a overhead unacceptable. > > Has anybody a suggestion ?
In cases where I have the above (1:N where N is huge), I change it to a unidirectional N:1 coming from the other bean. In your example, you'd have a uni-N:1 from B to A. You'd change you code to the following:
1. A a = home.findByPrimaryKey(x); 2. B b = home.findByPrimaryKey(y); 3. b.setA(a);
This way, the A's do not have a Collection of B's. Instead, each B has a reference to an A. You can still load the B's for an A through a finder query rather than navigating the relationship.
Having said all that, I believe that the container *could* theoretically optimize your code above to *not* load all the B's (nor all their PKs), but instead wait until you attempt to access the Collection's elements. When you add a B to an A, it should be able to make the assignment in the DB without loading the Collection. However, you'll be depending on the container and it's more likely that no container has done this level of optimization.
David Harkness Sr. Software Engineer Sony Pictures Digital Networks (310) 482-4756
===================================================================Companion Site: http://www.corej2eepatterns.com J2EE BluePrints: http://java.sun.com/blueprints/corej2eepatterns List Archive: http://archives.java.sun.com/archives/j2eepatterns-interest.html Unsubscribing: email "signoff J2EEPATTERNS-INTEREST" to listserv@(protected)
|
|