Wouter van der Kamp created OPENJPA-2680:
--------------------------------------------

             Summary: entityManager.merge() sends unnecessary select statements 
to the database 
                 Key: OPENJPA-2680
                 URL: https://issues.apache.org/jira/browse/OPENJPA-2680
             Project: OpenJPA
          Issue Type: Bug
    Affects Versions: 2.4.1
            Reporter: Wouter van der Kamp


See uploaded test code.

Test.test1() does a merge() on a new object with a @GeneratedValue id. Here 
OpenJPA sends this query to the database:

SELECT t0.name FROM Country t0 WHERE t0.id = ? [params=(long) 0]

Presumably to check whether the entity is already present in the database, but 
this is unnecessary because it's a new object without an id (id == null). 

Workaround for this bug is to use persist() in stead of merge(). But this is 
not always possible, for example when using an object which is not known by the 
EntityManager. This is Test.test2(), where OpenJPA sends the queries:

SELECT t1.id, t1.name, t0.name FROM Citizen t0 LEFT OUTER JOIN Country t1 ON 
t0.countryId = t1.id WHERE t0.id = ? [params=(long) 0]





--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to