[ https://issues.apache.org/jira/browse/CAY-2349?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Nikita Timofeev closed CAY-2349. -------------------------------- Resolution: Fixed Fixed in STABLE-4.0 per https://github.com/apache/cayenne/commit/3ed2301bf0deee0c03179586d271254872994173 > 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 > Assignee: Nikita Timofeev > Fix For: 4.0.B1, 4.1.M1 > > > 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)