[ 
https://issues.apache.org/jira/browse/CAY-2349?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16128437#comment-16128437
 ] 

Nikita Timofeev commented on CAY-2349:
--------------------------------------

Here is minimal test case that reproduces this (it throws 
{{NullPointerException}}):
{code}
        tArtist.insert(1, "artist1");
        tPainting.insert(1, "painting1", 1, 0);

        ObjectSelect<Painting> s1 = 
ObjectSelect.query(Painting.class).sharedCache("g1");
        ObjectSelect<Painting> s2 = 
ObjectSelect.query(Painting.class).prefetch(Painting.TO_ARTIST.disjoint()).sharedCache("g1");

        List<Painting> paintings = s1.select(context);
        assertEquals(1, paintings.size());
        assertNotNull(paintings.get(0).getToArtist());

        paintings = s2.select(context);
        assertEquals(1, paintings.size());
        assertNotNull(paintings.get(0).getToArtist());
{code}

> Cayenne cache issue: 'SelectQuery' with prefetches loses relationships (null)
> -----------------------------------------------------------------------------
>
>                 Key: CAY-2349
>                 URL: https://issues.apache.org/jira/browse/CAY-2349
>             Project: Cayenne
>          Issue Type: Bug
>          Components: Core Library
>    Affects Versions: 4.0.B1
>         Environment: JCacheModule, ehcache.
>            Reporter: Artyom Kravchenko
>
> I have faced with the problem when SelectQuery returns wrong query result: 
> returned object  lost some of the  relationships - they are null.
> I have used prefetches (to load several number of objects in one go) and 
> shared cache (to put query result to cache). I have found an use case where 
> it always reproduces, see my test:
> {code:java}
> class CayenneJCacheTest {
>     def cayenneRuntime
>     @Test
>     void test() {
>         cayenneRuntime = new ServerRuntime("cayenne-project.xml", new 
> JCacheModule())
>        //select single artist with limited prefetch graph
>         selectFew()
>        //do the same query but with additional prefetches
>         List<Artist> artists =  selectMore()
>        // all actor's paintings has a gallery but it is lost from query 
> result - test failed
>         assertNotNull(artists[0].paintings[0].gallery)
>     }
>     List<Artist> selectFew() {
>         //prefetch artist.paintings only, do not prefetch   
> artist.paintings.gallery
>         ObjectSelect.query(CourseClass)
>                 .where(Artist.ID.eq('1001'))
>                 .prefetch(Artist.PAINTINGS.joint())
>                 .cacheStrategy(QueryCacheStrategy.SHARED_CACHE)
>                 .cacheGroup(Artist.class.simpleName)
>                 .select(cayenneRuntime.newContext())
>     }
>     
>      List<Artist> selectFew() {
>         //prefetch all related objects
>         ObjectSelect.query(CourseClass)
>                 .where(Artist.ID.eq('1001'))
>                 .prefetch(Artist.PAINTINGS.joint())
>                 .prefetch(Artist.PAINTINGS.dot(Painting.GALLERY).joint())
>                 .cacheStrategy(QueryCacheStrategy.SHARED_CACHE)
>                 .cacheGroup(Artist.class.simpleName)
>                 .select(cayenneRuntime.newContext())
>     }
>     
> }
> {code}



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to