Uploaded image for project: 'Cayenne'
  1. Cayenne
  2. CAY-1940

NullPointerException when try to Prefetch

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 3.2.M1
    • 4.0.M3
    • None
    • Ubuntu 14.04lts, Java 1.7, Mysql 5.5.37

    Description

      Use case description:

      Cayenne model:

      Tables:
      Contact
      id -primary key
      name - string
      Course
      id - primary key
      name - string
      Relation
      id - primary key
      entityIdentifier - entity name of related object
      entityId - id of related object
      ruleId - id of rule
      Rule
      id - primary key
      name - string

      Classes:
      Contact
      properties: id, name
      relations: List< ContactRuleRelation> ruleRelations

      Course
      properties: id, name
      relations: List< CourseRuleRelation > ruleRelations

      RuleRelation
      properties: id, entityIdentifier
      relations: rule

      ContactRuleRelation extends RuleRelation
      (entityIdentifier = 'Contact')

      CourseRuleRelation extends RuleRelation
      (entityIdentifier = 'Course')

      Rule
      properties: id, name

      Data in the database:
      Contact: id=1, name=Contact1
      Course: id=1, name=Course1
      Relation: id=1, objectIdentifier=Course, objectID=1, ruleId=1
      Rule: id=1, name=Rule1

      SelectQuery:
      select Contact by id = 1 and add prefetch relations.rule

      As result the exception:

      java.lang.NullPointerException
      at org.apache.cayenne.access.ResultScanParentAttachmentStrategy.indexParents(ResultScanParentAttachmentStrategy.java:104)
      at org.apache.cayenne.access.ResultScanParentAttachmentStrategy.linkToParent(ResultScanParentAttachmentStrategy.java:72)
      at org.apache.cayenne.access.HierarchicalObjectResolverNode.objectsFromDataRows(HierarchicalObjectResolverNode.java:70)
      at org.apache.cayenne.access.HierarchicalObjectResolver$DisjointProcessor.startDisjointPrefetch(HierarchicalObjectResolver.java:121)
      at org.apache.cayenne.query.PrefetchTreeNode.traverse(PrefetchTreeNode.java:206)
      at org.apache.cayenne.query.PrefetchTreeNode.traverse(PrefetchTreeNode.java:221)
      at org.apache.cayenne.query.PrefetchTreeNode.traverse(PrefetchTreeNode.java:221)
      at org.apache.cayenne.access.HierarchicalObjectResolver.resolveObjectTree(HierarchicalObjectResolver.java:96)
      at org.apache.cayenne.access.HierarchicalObjectResolver.synchronizedRootResultNodeFromDataRows(HierarchicalObjectResolver.java:78)
      at org.apache.cayenne.access.DataDomainQueryAction$ObjectConversionStrategy.toResultsTree(DataDomainQueryAction.java:565)
      at org.apache.cayenne.access.DataDomainQueryAction$SingleObjectConversionStrategy.convert(DataDomainQueryAction.java:603)
      at org.apache.cayenne.access.DataDomainQueryAction.interceptObjectConversion(DataDomainQueryAction.java:459)
      at org.apache.cayenne.access.DataDomainQueryAction.execute(DataDomainQueryAction.java:129)
      at org.apache.cayenne.access.DataDomain.onQueryNoFilters(DataDomain.java:605)
      at org.apache.cayenne.access.DataDomain$DataDomainQueryFilterChain.onQuery(DataDomain.java:838)

      Looks like Cayenne considers only entityId without entityIdentifier when try to load the prefetch.

      Attachments

        Activity

          People

            SavvaKolbachev Savva Kolbachev
            Andrey Narut Andrey
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: