You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by cu...@apache.org on 2011/06/27 16:54:55 UTC
svn commit: r1140188 - in /openjpa/branches/2.1.x:
openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/
openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xml/
openjpa-persistence-jdbc/src/test/resources/META-INF/ openjpa-persi...
Author: curtisr7
Date: Mon Jun 27 14:54:54 2011
New Revision: 1140188
URL: http://svn.apache.org/viewvc?rev=1140188&view=rev
Log:
OPENJPA-1989: Fix *ToOne xml fetch attribute to honor LAZY.
Added:
openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xml/TestToOneLazyXmlOverride.java
- copied, changed from r1097517, openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xml/TestToOneLazyXmlOverride.java
openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xml/XmlOverrideToOneEntity.java
- copied, changed from r1097517, openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xml/XmlOverrideToOneEntity.java
openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/xml/toone-orm.xml
- copied, changed from r1097517, openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/xml/toone-orm.xml
Modified:
openjpa/branches/2.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCStoreManager.java
openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/resources/META-INF/persistence.xml
openjpa/branches/2.1.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/XMLPersistenceMetaDataParser.java
Modified: openjpa/branches/2.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCStoreManager.java
URL: http://svn.apache.org/viewvc/openjpa/branches/2.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCStoreManager.java?rev=1140188&r1=1140187&r2=1140188&view=diff
==============================================================================
--- openjpa/branches/2.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCStoreManager.java (original)
+++ openjpa/branches/2.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCStoreManager.java Mon Jun 27 14:54:54 2011
@@ -459,7 +459,7 @@ public class JDBCStoreManager
}
Object coll = owner.fetchObject(fms[i].getIndex());
if (coll instanceof Map)
- coll = ((Map)coll).values();
+ coll = ((Map<?,?>)coll).values();
if (coll instanceof Collection<?> &&
((Collection<?>) coll).size() > 0) {
// Found eagerly loaded collection.
@@ -594,7 +594,7 @@ public class JDBCStoreManager
Union union = _sql.newUnion(mappings.length);
union.setExpectedResultCount(1, false);
- if (fetch.getSubclassFetchMode(mapping) != fetch.EAGER_JOIN)
+ if (fetch.getSubclassFetchMode(mapping) != EagerFetchModes.EAGER_JOIN)
union.abortUnion();
union.select(new Union.Selector() {
public void select(Select sel, int i) {
@@ -823,7 +823,7 @@ public class JDBCStoreManager
ResultObjectProvider[] rops = null;
final JDBCFetchConfiguration jfetch = (JDBCFetchConfiguration) fetch;
- if (jfetch.getSubclassFetchMode(mapping) != jfetch.EAGER_JOIN)
+ if (jfetch.getSubclassFetchMode(mapping) != EagerFetchModes.EAGER_JOIN)
rops = new ResultObjectProvider[mappings.length];
try {
@@ -1232,15 +1232,15 @@ public class JDBCStoreManager
int mode;
for (int i = 0; i < fms.length; i++) {
mode = fms[i].getEagerFetchMode();
- if (mode == fetch.EAGER_NONE)
+ if (mode == EagerFetchModes.EAGER_NONE)
continue;
if (!requiresSelect(fms[i], sm, fields, fetch))
continue;
// try to select with join first
- jtype = (fms[i].getNullValue() == fms[i].NULL_EXCEPTION)
- ? sel.EAGER_INNER : sel.EAGER_OUTER;
- if (mode != fetch.EAGER_PARALLEL && !fms[i].isEagerSelectToMany()
+ jtype = (fms[i].getNullValue() == FieldMetaData.NULL_EXCEPTION)
+ ? Select.EAGER_INNER : Select.EAGER_OUTER;
+ if (mode != EagerFetchModes.EAGER_PARALLEL && !fms[i].isEagerSelectToMany()
&& fms[i].supportsSelect(sel, jtype, sm, this, fetch) > 0
&& sel.eagerClone(fms[i], jtype, false, 1) != null)
continue;
@@ -1252,8 +1252,8 @@ public class JDBCStoreManager
// to use a to-many join also. currently we limit eager
// outer joins to non-LRS, non-ranged selects that don't already
// have an eager to-many join
- if ((hasJoin || mode == fetch.EAGER_JOIN
- || (mode == fetch.DEFAULT && sm != null))
+ if ((hasJoin || mode == EagerFetchModes.EAGER_JOIN
+ || (mode == FetchConfiguration.DEFAULT && sm != null))
&& fms[i].isEagerSelectToMany()
&& !inEagerJoin
&& !sel.hasEagerJoin(true)
@@ -1268,8 +1268,8 @@ public class JDBCStoreManager
}
// finally, try parallel
- if (eager == fetch.EAGER_PARALLEL
- && (sels = fms[i].supportsSelect(sel, sel.EAGER_PARALLEL, sm,
+ if (eager == EagerFetchModes.EAGER_PARALLEL
+ && (sels = fms[i].supportsSelect(sel, Select.EAGER_PARALLEL, sm,
this, fetch)) != 0)
sel.eagerClone(fms[i], Select.EAGER_PARALLEL,
fms[i].isEagerSelectToMany(), sels);
@@ -1372,7 +1372,7 @@ public class JDBCStoreManager
seld = Math.max(fseld, seld);
} else if (optSelect(fms[i], sel, sm, fetch)) {
fseld = fms[i].select(sel, sm, this,
- fetch.traverseJDBC(fms[i]), fetch.EAGER_NONE);
+ fetch.traverseJDBC(fms[i]), EagerFetchModes.EAGER_NONE);
// don't upgrade seld to > 0 based on these fields, since
// they're not in the calculated field set
@@ -1412,10 +1412,10 @@ public class JDBCStoreManager
private boolean optSelect(FieldMapping fm, Select sel,
OpenJPAStateManager sm, JDBCFetchConfiguration fetch) {
return !fm.isInDefaultFetchGroup()
- && !fm.isDefaultFetchGroupExplicit()
+ && !fm.isDefaultFetchGroupExplicit()
&& (sm == null || sm.getPCState() == PCState.TRANSIENT
|| !sm.getLoaded().get(fm.getIndex()))
- && fm.supportsSelect(sel, sel.TYPE_TWO_PART, sm, this, fetch) > 0;
+ && fm.supportsSelect(sel, Select.TYPE_TWO_PART, sm, this, fetch) > 0;
}
/**
@@ -1458,7 +1458,7 @@ public class JDBCStoreManager
if (fetch.requiresFetch(fms[j]) != FetchConfiguration.FETCH_LOAD
&& ((!fms[j].isInDefaultFetchGroup()
&& fms[j].isDefaultFetchGroupExplicit())
- || fms[j].supportsSelect(sel, sel.TYPE_TWO_PART, sm, this,
+ || fms[j].supportsSelect(sel, Select.TYPE_TWO_PART, sm, this,
fetch) <= 0))
continue;
@@ -1472,10 +1472,8 @@ public class JDBCStoreManager
}
// if can select with tables already selected, do it
- if (fms[j].supportsSelect(sel, sel.TYPE_JOINLESS, sm, this,
- fetch) > 0)
- fms[j].select(sel, null, this, fetch.traverseJDBC(fms[j]),
- fetch.EAGER_NONE);
+ if (fms[j].supportsSelect(sel, Select.TYPE_JOINLESS, sm, this, fetch) > 0)
+ fms[j].select(sel, null, this, fetch.traverseJDBC(fms[j]), EagerFetchModes.EAGER_NONE);
}
}
}
Copied: openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xml/TestToOneLazyXmlOverride.java (from r1097517, openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xml/TestToOneLazyXmlOverride.java)
URL: http://svn.apache.org/viewvc/openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xml/TestToOneLazyXmlOverride.java?p2=openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xml/TestToOneLazyXmlOverride.java&p1=openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xml/TestToOneLazyXmlOverride.java&r1=1097517&r2=1140188&rev=1140188&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xml/TestToOneLazyXmlOverride.java (original)
+++ openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xml/TestToOneLazyXmlOverride.java Mon Jun 27 14:54:54 2011
@@ -46,14 +46,20 @@ public class TestToOneLazyXmlOverride ex
em.clear();
resetSQL();
- em.find(XmlOverrideToOneEntity.class, x.getId());
- for (String lastSql : sql) {
+ em.find(XmlOverrideToOneEntity.class, x.getId());
+
+ assertTrue(sql.size() == 1);
+ String lastSql = sql.get(0);
// Make sure we don't have any joins!
assertFalse("Shouldn't have found any instances of join or JOIN in last sql, but did. Last SQL = "
+ lastSql, lastSql.contains("join") || lastSql.contains("JOIN"));
- }
- }finally{
- if(em.getTransaction().isActive()){
+
+ // Make sure that we selected lazy join columns.
+ assertTrue(lastSql.contains("o2o"));
+ assertTrue(lastSql.contains("m2o"));
+
+ } finally {
+ if (em.getTransaction().isActive()) {
em.getTransaction().rollback();
}
em.close();
Copied: openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xml/XmlOverrideToOneEntity.java (from r1097517, openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xml/XmlOverrideToOneEntity.java)
URL: http://svn.apache.org/viewvc/openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xml/XmlOverrideToOneEntity.java?p2=openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xml/XmlOverrideToOneEntity.java&p1=openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xml/XmlOverrideToOneEntity.java&r1=1097517&r2=1140188&rev=1140188&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xml/XmlOverrideToOneEntity.java (original)
+++ openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/xml/XmlOverrideToOneEntity.java Mon Jun 27 14:54:54 2011
@@ -19,12 +19,16 @@
*/
package org.apache.openjpa.persistence.xml;
+import java.util.List;
+
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
+import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
+import javax.persistence.Version;
@Entity
public class XmlOverrideToOneEntity {
@@ -32,12 +36,17 @@ public class XmlOverrideToOneEntity {
@GeneratedValue(strategy = GenerationType.AUTO)
int id;
- @OneToOne
+ @OneToOne
+ @JoinColumn(name="o2o")
XmlOverrideToOneEntity otherO2O;
@ManyToOne
+ @JoinColumn(name="m2o")
XmlOverrideToOneEntity otherM2O;
-
+
+ @Version
+ int version;
+
public long getId() {
return id;
}
Modified: openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/resources/META-INF/persistence.xml
URL: http://svn.apache.org/viewvc/openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/resources/META-INF/persistence.xml?rev=1140188&r1=1140187&r2=1140188&view=diff
==============================================================================
--- openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/resources/META-INF/persistence.xml (original)
+++ openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/resources/META-INF/persistence.xml Mon Jun 27 14:54:54 2011
@@ -385,4 +385,11 @@
<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema"/>
</properties>
</persistence-unit>
+ <persistence-unit name="to-one-xml-override">
+ <mapping-file>org/apache/openjpa/persistence/xml/toone-orm.xml
+ </mapping-file>
+ <properties>
+ <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)" />
+ </properties>
+ </persistence-unit>
</persistence>
Copied: openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/xml/toone-orm.xml (from r1097517, openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/xml/toone-orm.xml)
URL: http://svn.apache.org/viewvc/openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/xml/toone-orm.xml?p2=openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/xml/toone-orm.xml&p1=openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/xml/toone-orm.xml&r1=1097517&r2=1140188&rev=1140188&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/xml/toone-orm.xml (original)
+++ openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/resources/org/apache/openjpa/persistence/xml/toone-orm.xml Mon Jun 27 14:54:54 2011
@@ -25,8 +25,10 @@
<entity name="XmlOverrideToOneEntity" class="XmlOverrideToOneEntity">
<attributes>
<many-to-one name="otherM2O" fetch="LAZY">
+ <join-column name="m2o"/>
</many-to-one>
<one-to-one name="otherO2O" fetch="LAZY">
+ <join-column name="o2o"/>
</one-to-one>
</attributes>
</entity>
Modified: openjpa/branches/2.1.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/XMLPersistenceMetaDataParser.java
URL: http://svn.apache.org/viewvc/openjpa/branches/2.1.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/XMLPersistenceMetaDataParser.java?rev=1140188&r1=1140187&r2=1140188&view=diff
==============================================================================
--- openjpa/branches/2.1.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/XMLPersistenceMetaDataParser.java (original)
+++ openjpa/branches/2.1.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/XMLPersistenceMetaDataParser.java Mon Jun 27 14:54:54 2011
@@ -1463,9 +1463,14 @@ public class XMLPersistenceMetaDataParse
protected void parseOneToOne(FieldMetaData fmd, Attributes attrs)
throws SAXException {
String val = attrs.getValue("fetch");
- if (val == null || "EAGER".equals(val)) {
- fmd.setInDefaultFetchGroup(true);
- }
+ boolean dfg = (val != null && val.equals("LAZY")) ? false : true;
+
+ // We need to toggle the DFG explicit flag here because this is used for an optimization when selecting an
+ // Entity with lazy fields.
+ fmd.setDefaultFetchGroupExplicit(true);
+ fmd.setInDefaultFetchGroup(dfg);
+ fmd.setDefaultFetchGroupExplicit(false);
+
val = attrs.getValue("target-entity");
if (val != null)
fmd.setTypeOverride(AnnotationPersistenceMetaDataParser.toOverrideType(classForName(val)));
@@ -1485,9 +1490,14 @@ public class XMLPersistenceMetaDataParse
protected void parseManyToOne(FieldMetaData fmd, Attributes attrs)
throws SAXException {
String val = attrs.getValue("fetch");
- if (val == null || "EAGER".equals(val)) {
- fmd.setInDefaultFetchGroup(true);
- }
+ boolean dfg = (val != null && val.equals("LAZY")) ? false : true;
+
+ // We need to toggle the DFG explicit flag here because this is used for an optimization when selecting an
+ // Entity with lazy fields.
+ fmd.setDefaultFetchGroupExplicit(true);
+ fmd.setInDefaultFetchGroup(dfg);
+ fmd.setDefaultFetchGroupExplicit(false);
+
val = attrs.getValue("target-entity");
if (val != null)
fmd.setTypeOverride(AnnotationPersistenceMetaDataParser.toOverrideType(classForName(val)));