Java Mailing List Archive

http://www.junlu.com/

Home » Home (12/2007) » J2EE Pattern »

Re: EJB relationship

Harkness, David

2004-03-25


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)
©2008 junlu.com - Jax Systems, LLC, U.S.A.