You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by "Michael Dick (JIRA)" <ji...@apache.org> on 2009/07/15 17:38:14 UTC
[jira] Commented: (OPENJPA-1174) OpenJPA performs differently with
orm.xml and annotations
[ https://issues.apache.org/jira/browse/OPENJPA-1174?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12731511#action_12731511 ]
Michael Dick commented on OPENJPA-1174:
---------------------------------------
Thanks for the patch Ravi. I noticed that you also updated how we handle embeddables when specified in a mapping file. They're now included in the default fetch group automatically.
It matches the annotation handling and it's a great catch but we probably should add a testcase for it (unless I've missed where it's covered).
The patch looks good though - running regression tests now.
> OpenJPA performs differently with orm.xml and annotations
> ---------------------------------------------------------
>
> Key: OPENJPA-1174
> URL: https://issues.apache.org/jira/browse/OPENJPA-1174
> Project: OpenJPA
> Issue Type: Bug
> Affects Versions: 2.0.0
> Reporter: Ravi P Palacherla
> Assignee: Ravi P Palacherla
> Attachments: OPENJPA-1174-trunk.patch
>
>
> When configurations are provided from orm.xml file, some behaviors are different from behaviors on annotation configuration.
> The behavior difference occurs when fetch=LAZY is specified on many-to-one mapping.
> When there are two objects Country and Security and Security has many-to-one mapping field country,
> OpenJPA executes one more SQL query to get country field if orm.xml file is used.
> ----
> * annotation case
> // step 1) Load country in entity manager
> aUS_country = t.em.find(Country.class, aUS_sid);
> // SELECT t0.NAME FROM TEST16.COUNTRY t0 WHERE t0.COUNTRY_ID = ?
> // step 2) Load security in entity manager
> aI_security = t.em.find(Security.class, aI_sid);
> // SELECT t0.COUNTRY_ID, t0.SYMBOL FROM TEST19.SECURITY t0 WHERE t0.SECURITY_ID = ?
> // step 3) get country from security
> Country aUS_country2 = aI_security.getCountry();
> // no SQL was executed.
> .
> * orm.xml case
> .
> // step 1) Load country in entity manager
> aUS_country = t.em.find(Country.class, aUS_sid);
> // SELECT t0.NAME FROM TEST16.COUNTRY t0 WHERE t0.COUNTRY_ID = ?
> .
> // step 2) Load security in entity manager
> aI_security = t.em.find(Security.class, aI_sid);
> // SELECT t0.SYMBOL FROM TEST16.SECURITY t0 WHERE t0.SECURITY_ID = ?
> .
> // step 3) get country from security
> Country aUS_country2 = aI_security.getCountry();
> // SELECT t1.COUNTRY_ID, t1.NAME FROM TEST16.SECURITY t0, TEST16.COUNTRY t1 WHERE t0.SECURITY_ID = ? AND t0.COUNTRY_ID = t1.COUNTRY_ID
> ----
> The important difference is in step 2. When using orm.xml, many-to-one field "country" was not loaded if fetch=LAZY.
> Instead, it's loaded on annotation configuration.
> .
> Because many-to-one "country" field is not loaded, step 3 executes additional SQL to load "country" field on orm.xml.
> Instead, on annotation case, step 3 did not execute any SQLs.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.