You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by "Nikita Timofeev (JIRA)" <ji...@apache.org> on 2017/08/16 11:02:01 UTC

[jira] [Closed] (CAY-2349) Cayenne cache issue: 'SelectQuery' with prefetches loses relationships (null)

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