Java Mailing List Archive

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

Re: EJB relationship

Harkness, David


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:
J2EE BluePrints:
List Archive:
Unsubscribing: email "signoff J2EEPATTERNS-INTEREST" to listserv@(protected)
©2008 - Jax Systems, LLC, U.S.A.