Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [eclipselink-users] Not retreiving OneToMany collections with lazy and eager option

Hi Christopher,

Thanks for your help. I made changes to the code now it is working.

Best regards,
Kiran



christopher delahunt wrote:
> 
> Hello Kiran,
> 
> Look at your code and find where you populate an Application entity's 
> appRejectMaps collection with ApplicationRejectMap entities.  If you are 
> not doing it, the collection will always be empty (until a refresh).  
> Where ever you set the
> ApplicationRejectMap -> Application  reference, you should also set the 
> Application -> ApplicationRejectMap
> 
> Here is a quick example I found:
> http://www.vogella.de/articles/JavaPersistenceAPI/article.html
> 
> Best Regards,
> Chris
> 
> On 22/11/2010 9:33 AM, Kiran Kumar Gubbi wrote:
>> Hi Christopher,
>>
>> Sorry to bother you again. I am still not clear, may be an example will
>> help
>> me to understand or if you can mention the changes do I need to make this
>> bidirectional mapping to work.
>>
>>
>> Thanks,
>> Kiran
>>
>>
>> christopher delahunt wrote:
>>   
>>> Sorry I was not clearer. 
>>>
>>> No, there is nothing wrong with your mappings.  This is a reoccurring 
>>> problem with bidirectional relationships, as JPA does not maintain 
>>> relationships for you - the application must maintain both sides 
>>> itself.  When the application sets applicationRejectMap.application = 
>>> app, it must also add the applicationRejectMap to the app's 
>>> appRejectMaps collection, otherwise each and every time you access the 
>>> appRejectMaps it will never see this change - until you the app instance 
>>> is refreshed. 
>>>
>>> Best Regards,
>>> Chris
>>>
>>> On 22/11/2010 9:16 AM, Kiran Kumar Gubbi wrote:
>>>     
>>>> Hi Christopher,
>>>>
>>>> Here is my code.
>>>>
>>>> The Application is parent entity which has collection OneToMany of
>>>> ApplicationRejectMap.  The entity detail given below.
>>>>
>>>> @Entity
>>>> @Table( name = "APPLICATION_TBL" )
>>>> public class Application {
>>>>
>>>> @Column( name = "APPLICATION_ID", nullable = false, unique = true )
>>>> private Integer id;
>>>>
>>>> @OneToMany( mappedBy = "application", fetch = FetchType.LAZY )
>>>> private Set< ApplicationRejectMap >  appRejectMaps;
>>>> }
>>>>
>>>> The child class ApplicationRejectMap details which as ManyToOne
>>>> relation
>>>> with Application as mentioned beow.
>>>>
>>>> @Entity
>>>> @Table( name = "APPLICATION_REJECT_MAP_TBL" )
>>>> public class ApplicationRejectMap {
>>>>
>>>> @Column( name = "REJECT_MAP_ID" )
>>>> private Integer id;
>>>>
>>>> @ManyToOne
>>>> @JoinColumn( name = "REJECT_APPLICATION" )
>>>> private Application application;
>>>> }
>>>>
>>>> Do you think is there any issue on this? 
>>>>
>>>>
>>>> Thanks,
>>>> Kiran
>>>>
>>>>
>>>> christopher delahunt wrote:
>>>>   
>>>>       
>>>>> Hello Kiran,
>>>>>
>>>>>  From the sounds of it, the OneToMany is mapped by a OneToOne back 
>>>>> pointer, and are maintaining relationship changes through the OneToOne 
>>>>> but not the OneToMany.   If you set one side of a bi directional 
>>>>> relationship, the application must also maintain the other side as
>>>>> well 
>>>>> or the cache becomes out of synch with what is in the database until a 
>>>>> refresh occurs.  Invalidating the objects is essentially forcing a 
>>>>> refresh, which causes the OneToMany to be queried from the database. 
>>>>>
>>>>> When you add/remove from a relationship, the application will also
>>>>> need 
>>>>> to add/remove from the OneToMany collection as well.
>>>>>
>>>>> Best Regards,
>>>>> Chris
>>>>>
>>>>> On 22/11/2010 6:01 AM, Kiran Kumar Gubbi wrote:
>>>>>     
>>>>>         
>>>>>> Hi all,
>>>>>>
>>>>>> I am currently trying to improve performance of our application . One
>>>>>> of
>>>>>> the
>>>>>> thing I wanted to use is lazy loading of oneToMany collections. But
>>>>>> it
>>>>>> looks
>>>>>> like the data is not retrieved eventhough it is present in the
>>>>>> database.
>>>>>> The
>>>>>> scenario is we upload the application form through web service, it
>>>>>> generates
>>>>>> the form  data and if the form is not valid it generates rejection
>>>>>> list
>>>>>> in
>>>>>> the database. On looking for this same form on our web application
>>>>>> the
>>>>>> rejection list is not retrieved from the database. I have used fetch
>>>>>> type
>>>>>> is
>>>>>> lazy for this collection. One thing we have noticed that after
>>>>>> clearing
>>>>>> cache using the following code from the screen the rejection list
>>>>>> start
>>>>>> appearing on the screen.
>>>>>> ( ( JpaEntityManager ) getEntityManager().getDelegate()
>>>>>> ).getServerSession(). getIdentityMapAccessor().invalidateAll(); 
>>>>>>
>>>>>> Is there something I am missing here ?
>>>>>>
>>>>>> My colleague observed even Eager fetching is not working .
>>>>>>
>>>>>> Thanks,
>>>>>>
>>>>>> Kiran
>>>>>>
>>>>>>
>>>>>>   
>>>>>>       
>>>>>>           
>>>>> _______________________________________________
>>>>> eclipselink-users mailing list
>>>>> eclipselink-users@xxxxxxxxxxx
>>>>> https://dev.eclipse.org/mailman/listinfo/eclipselink-users
>>>>>
>>>>>
>>>>>     
>>>>>         
>>>>   
>>>>       
>>> _______________________________________________
>>> eclipselink-users mailing list
>>> eclipselink-users@xxxxxxxxxxx
>>> https://dev.eclipse.org/mailman/listinfo/eclipselink-users
>>>
>>>
>>>     
>>
>>   
> 
> _______________________________________________
> eclipselink-users mailing list
> eclipselink-users@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/eclipselink-users
> 
> 

-- 
View this message in context: http://old.nabble.com/Not-retreiving-OneToMany-collections-with-lazy-and-eager-option-tp30277461p30279567.html
Sent from the EclipseLink - Users mailing list archive at Nabble.com.



Back to the top