[ 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)