LEFT JOIN FETCH queries with fresh fetches from the db do not follow JPA Spec 
4.4.5.3
-------------------------------------------------------------------------------------

                 Key: OPENJPA-894
                 URL: https://issues.apache.org/jira/browse/OPENJPA-894
             Project: OpenJPA
          Issue Type: Bug
          Components: query
    Affects Versions: 1.2.0
         Environment: Any, tested with Windows
            Reporter: Jody Grassel


Discovered what seems to be a break with JPA Specification 1.0, section 4.4.5.3 
(Fetch Joins).  The query in question uses the  LEFT JOIN FETCH sematic, so 
there is the expectation that the result list will contain a copy of the entity 
reference for every match on the right side of the join (the spec uses the 
example with the query "SELECT d FROM department d LEFT JOIN FETCH d.employees 
WHERE d.deptno = 1" where 5 employees are members of department(pk=1) the 
resultlist should have 5 copies of Department(pk=1). )

Now, if I create all of the entities, persist them to the database, but do not 
clear the persistence context (leaving all the new entities managed by the 
persistence context still), the query performs as expected.  I get multiple 
copies of the entity I issued the query for, one for each item successfully 
matching the LEFT JOIN FETCH.  In the example I will update shortly, I get:

 [junit] --------------------------------------------------
 [junit] Executing testQuery001

 [junit] Executing named query getAGroup with intData=42 ...
 [junit] ResultList size: 8
 [junit] 1 EntityA(id=1): 42, Entity A - PK 1
 [junit] 1 EntityA(id=1): 42, Entity A - PK 1
 [junit] 1 EntityA(id=1): 42, Entity A - PK 1
 [junit] 1 EntityA(id=1): 42, Entity A - PK 1
 [junit] 1 EntityA(id=2): 42, Entity A - PK 2
 [junit] 1 EntityA(id=2): 42, Entity A - PK 2
 [junit] 1 EntityA(id=2): 42, Entity A - PK 2
 [junit] 1 EntityA(id=2): 42, Entity A - PK 2


However, if I clear the persistence context, forcing OpenJPA to make a fetch 
from the database, I only get unique instances of the entity I issued the query 
for, not multiple copies for each match on the right side of the join.

[junit] --------------------------------------------------
[junit] Executing testQuery002

[junit] Clearing persistence context...
[junit] Executing named query getAGroup with intData=42 ...
[junit] ResultList size: 2
[junit] 1 EntityA(id=1): 42, Entity A - PK 1
[junit] 1 EntityA(id=2): 42, Entity A - PK 2

Both tests use the exact same code for everything, except testQuery002 does a 
em.clear() before running the query.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to