Yes, let me know what additional information you would need to reproduce
this. It's a pretty straight forward test case.

I have two entity beans A and B
A has OneToMany relationship to B with persist=ALL, fetch=LAZY
There is no inverse relation from B to A.
I am using it inside servlets (inside WebSphere Application Server 6.1)
Now inside a transaction
  - I find an instance of A using entity manager
  - I get the list of 'B' from this instance of A and add a new instance
of B to this list
  - I commit this transaction

The new instance of B does not get added. 

However if I change fetch=EAGER for this relation, things work fine and
new instance of B above gets inserted.

One more piece of information. I am not using OpenJPA enhancer and when
I deploy my application with fetch=LAZY I see this log/error. Note: In
my actual application RecPolicy has OneToMany relation to CallLog.

[10/25/07 12:45:22:129 EDT] 00000024 SystemErr     R 5517137
covApiService  INFO   [WebContainer : 2] openjpa.Enhance - Creating
subclass and redefining methods for "[class
com.covergence.soa.covapi.recpolicy.CallLog, class
com.covergence.soa.covapi.recpolicy.RecPolicy]". This means that your
application will be less efficient than it would if you ran the OpenJPA
enhancer.

-----Original Message-----
From: Patrick Linskey [mailto:[EMAIL PROTECTED] 
Sent: Monday, October 29, 2007 1:18 PM
To: [email protected]
Subject: Re: OneToMany - related entry not getting persisted?

Hi,

Given that it's a one-sided OneToMany, it sounds like it might be a
bug. Is it possible for you to provide us with more information, or
even a test case that fails?

Thanks,

-Patrick

On 10/26/07, Ajay Aggarwal <[EMAIL PROTECTED]> wrote:
> If I use FetchType.EAGER for my @OneToMany relation, things work fine
> and I correctly see following SQL statements in the trace log
>   - INSERT for new row into 'callLog'
>   - UPDATE for 'recPolicy'
>   - INSERT for a new row into association table 'recPolicy_callLog'
>
> So the question remains why is this not working for FetchType.LAZY? Is
> this a bug in openJPA 1.0 or incorrect-usage / user-error on my part?
>
>
> -----Original Message-----
> From: Ajay Aggarwal [mailto:[EMAIL PROTECTED]
> Sent: Friday, October 26, 2007 1:39 PM
> To: [email protected]
> Subject: RE: OneToMany - related entry not getting persisted?
>
> Thanks. But in my case, I do not have a ManyToOne relation on the
other
> side and that's on purpose.
>
> -----Original Message-----
> From: Gul Onural [mailto:[EMAIL PROTECTED]
> Sent: Friday, October 26, 2007 1:30 PM
> To: [email protected]
> Subject: RE: OneToMany - related entry not getting persisted?
>
>
>
> Have you checked
> http://forums.java.net/jive/message.jspa?messageID=212597.
>
> I believe that will answer your question.
>
> Gul
>
> -----Original Message-----
> From: Ajay Aggarwal [mailto:[EMAIL PROTECTED]
> Sent: Friday, October 26, 2007 1:19 PM
> To: [email protected]
> Subject: OneToMany - related entry not getting persisted?
>
> I am using openjpa1.0. My main entity class is RecPolicy which has a
> @OneToMany relation to entity 'CallLog'. I am using FetchType.LAZY
and
> CascadeType.ALL. See below:
>
>
>
>         Public class RecPolicy {
>
>             ...
>
>             @OneToMany (fetch=FetchType.LAZY, cascade=CascadeType.ALL)
>
>             private List <CallLog> calls;
>
>        }
>
>
>
>
>
> Now I am trying to add a CallLog entry to an existing RecPolicy entry,
> but it's not working. My code looks like
>
>
>
>                         EntityManager em =
> factory.createEntityManager();
>
>                         EntityTransaction tx = em.getTransaction();
>
>                         try {
>
>                                     tx.begin();
>
>                                     RecPolicy.RecPolicyId policyId =
...
>
>                                     RecPolicy policy =
> em.find(RecPolicy.class, policyId);
>
>                                     CallLog callLog = new CallLog(sid,
> this.fromUri, this.toUri);
>
>                                     policy.calls.add(callLog);
>
>                                     tx.commit();
>
>                         } catch (Exception e) {
>
>                                     if (tx.isActive()) tx.rollback();
>
>                         } finally {
>
>                                     em.close();
>
>                         }
>
>
>
>
>
> When I enable openjpa logging all I see is an UPDATE sql to update the
> RecPolicy, but no INSERT for CallLog? Do I need to persist new CallLog
> above explicitly? Is 'LAZY' fetch causing this behavior?
>
>
>
>


-- 
Patrick Linskey
202 669 5907

Reply via email to