You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by fa...@apache.org on 2008/10/14 22:45:40 UTC
svn commit: r704674 - in /openjpa/branches/1.2.x:
openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/
openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/
openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/relations/
Author: fancy
Date: Tue Oct 14 13:45:40 2008
New Revision: 704674
URL: http://svn.apache.org/viewvc?rev=704674&view=rev
Log:
OPENJPA-744
Reverting change to perform additional testing on the 1.2.x branch
Modified:
openjpa/branches/1.2.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCStoreManager.java
openjpa/branches/1.2.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/StoreCollectionFieldStrategy.java
openjpa/branches/1.2.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/relations/TestInverseEagerSQL.java
Modified: openjpa/branches/1.2.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCStoreManager.java
URL: http://svn.apache.org/viewvc/openjpa/branches/1.2.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCStoreManager.java?rev=704674&r1=704673&r2=704674&view=diff
==============================================================================
--- openjpa/branches/1.2.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCStoreManager.java (original)
+++ openjpa/branches/1.2.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCStoreManager.java Tue Oct 14 13:45:40 2008
@@ -35,7 +35,6 @@
import javax.sql.DataSource;
-import org.apache.openjpa.enhance.PersistenceCapable;
import org.apache.openjpa.event.OrphanedKeyAction;
import org.apache.openjpa.jdbc.conf.JDBCConfiguration;
import org.apache.openjpa.jdbc.conf.QuerySQLCacheValue;
@@ -355,19 +354,7 @@
getMappedByFieldMapping();
Object mappedByObject = info.result.getMappedByValue();
if (mappedByFieldMapping != null && mappedByObject != null)
- if (mappedByObject instanceof OpenJPAId)
- // The inverse relation can not be set since
- // we are eagerly loading this sm for
- // a sm owner that is still in the process of
- // initializing itself.
- // Remember owner oid by setIntermediate().
- // The inverse relation is set later by
- // setInverseRelation() when the sm owner is fully
- // initialized.
- sm.setIntermediate(mappedByFieldMapping.getIndex(),
- mappedByObject);
- else
- setMappedBy(sm, mappedByFieldMapping, mappedByObject);
+ setMappedBy(sm, mappedByFieldMapping, mappedByObject);
}
// load the selected mappings into the given state manager
if (res != null) {
@@ -375,7 +362,6 @@
mapping = (ClassMapping) sm.getMetaData();
load(mapping, sm, fetch, res);
getVersion(mapping, sm, res);
- setInverseRelation(sm, mapping, res);
}
return true;
} finally {
@@ -384,47 +370,6 @@
}
}
- private void setInverseRelation(OpenJPAStateManager owner,
- ClassMapping mapping, Result res) {
- FieldMapping[] fms = mapping.getFieldMappings();
-
- // At this point, the owner is fully initialized.
- // Check if the owner has eagerly loaded ToMany relations.
- for (int i = 0; i < fms.length; i++) {
- if (res.getEager(fms[i]) != null) {
- Object coll = owner.fetchObject(fms[i].getIndex());
- if (coll instanceof Collection &&
- ((Collection) coll).size() > 0) {
- // Found eagerly loaded collection.
- // Publisher (1) <==> (M) Magazine
- // publisher has a EAGER OneToMany relation
- // magazine has a EAGER or LAZY ManyToOne publisher
- // For each member (Magazine) in the collection,
- // set its inverse relation (Publisher).
- for (Iterator itr = ((Collection) coll).iterator();
- itr.hasNext();) {
- PersistenceCapable pc = (PersistenceCapable) itr.next();
- OpenJPAStateManager sm = (OpenJPAStateManager) pc.
- pcGetStateManager();
- FieldMapping[] fmd = ((ClassMapping) sm.getMetaData()).
- getFieldMappings();
- for (int j = 0; j < fmd.length; j++) {
- Object oid = sm.getIntermediate(fmd[j].getIndex());
- // if oid was setIntermediate() previously
- // and it is the same as the owner,
- // then set the inverse relation
- if (oid != null &&
- oid.equals(owner.getObjectId())) {
- sm.storeObject(fmd[j].getIndex(),
- owner.getPersistenceCapable());
- }
- }
- }
- }
- }
- }
- }
-
protected void setMappedBy(OpenJPAStateManager sm,
FieldMapping mappedByFieldMapping, Object mappedByObject) {
ClassMapping mapping = (ClassMapping) sm.getMetaData();
@@ -969,29 +914,9 @@
ConnectionInfo info = new ConnectionInfo();
info.result = result;
info.mapping = mapping;
-
- // if inverse relation is known, exclude loading during find
- exclude = excludeInverseRelation(mapping, info, exclude);
return _ctx.find(oid, fetch, exclude, info, 0);
}
- private BitSet excludeInverseRelation(ClassMapping mapping,
- ConnectionInfo info, BitSet exclude) {
- FieldMapping inverse = info.result.getMappedByFieldMapping();
- if (inverse != null) {
- FieldMapping[] fms = mapping.getDefinedFieldMappings();
- if (exclude == null)
- exclude = new BitSet(fms.length);
- for (int i = 0; i < fms.length; i++) {
- if (fms[i] == inverse) {
- exclude.set(fms[i].getIndex());
- break;
- }
- }
- }
- return exclude;
- }
-
/**
* Load the given state manager with data from the result set. Only
* mappings originally selected will be loaded.
Modified: openjpa/branches/1.2.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/StoreCollectionFieldStrategy.java
URL: http://svn.apache.org/viewvc/openjpa/branches/1.2.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/StoreCollectionFieldStrategy.java?rev=704674&r1=704673&r2=704674&view=diff
==============================================================================
--- openjpa/branches/1.2.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/StoreCollectionFieldStrategy.java (original)
+++ openjpa/branches/1.2.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/StoreCollectionFieldStrategy.java Tue Oct 14 13:45:40 2008
@@ -312,8 +312,8 @@
if (field.getOrderColumn() != null)
seq = res.getInt(field.getOrderColumn(), orderJoins) + 1;
- // for inverse relation field
- setMappedBy(oid, res);
+ // for inverseEager field
+ setMappedBy(oid, sm, coll, res);
Object val = loadElement(null, store, fetch, res, dataJoins);
add(store, coll, val);
}
@@ -322,23 +322,6 @@
return rels;
}
- private void setMappedBy(Object oid, Result res) {
- // for inverse toOne relation field
- FieldMapping mappedByFieldMapping = field.getMappedByMapping();
-
- if (mappedByFieldMapping != null) {
- ValueMapping val = mappedByFieldMapping.getValueMapping();
- ClassMetaData decMeta = val.getTypeMetaData();
- // this inverse field does not have corresponding classMapping
- // its value may be a collection/map etc.
- if (decMeta == null)
- return;
-
- res.setMappedByFieldMapping(mappedByFieldMapping);
- res.setMappedByValue(oid);
- }
- }
-
private void setMappedBy(Object oid, OpenJPAStateManager sm, Object coll,
Result res) {
// for inverseEager field
Modified: openjpa/branches/1.2.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/relations/TestInverseEagerSQL.java
URL: http://svn.apache.org/viewvc/openjpa/branches/1.2.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/relations/TestInverseEagerSQL.java?rev=704674&r1=704673&r2=704674&view=diff
==============================================================================
--- openjpa/branches/1.2.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/relations/TestInverseEagerSQL.java (original)
+++ openjpa/branches/1.2.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/relations/TestInverseEagerSQL.java Tue Oct 14 13:45:40 2008
@@ -21,16 +21,12 @@
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
-import java.util.Set;
-
import javax.persistence.EntityManager;
import javax.persistence.Query;
import junit.textui.TestRunner;
import org.apache.openjpa.persistence.OpenJPAEntityManager;
import org.apache.openjpa.persistence.OpenJPAQuery;
-import org.apache.openjpa.persistence.query.Magazine;
-import org.apache.openjpa.persistence.query.Publisher;
import org.apache.openjpa.persistence.test.SQLListenerTestCase;
@@ -40,8 +36,7 @@
public void setUp() {
setUp(Customer.class, Customer.CustomerKey.class, Order.class,
EntityAInverseEager.class, EntityA1InverseEager.class, EntityA2InverseEager.class,
- EntityBInverseEager.class, EntityCInverseEager.class, EntityDInverseEager.class,
- Publisher.class, Magazine.class);
+ EntityBInverseEager.class, EntityCInverseEager.class, EntityDInverseEager.class);
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
@@ -98,29 +93,7 @@
c1.setD(d1);
d1.setC(c1);
}
-
- Publisher p1 = new Publisher();
- p1.setName("publisher1");
- em.persist(p1);
-
- for (int i = 0; i < 4; i++) {
- Magazine magazine = new Magazine();
- magazine.setIdPublisher(p1);
- magazine.setName("magagine"+i+"_"+p1.getName());
- em.persist(magazine);
- }
-
- Publisher p2 = new Publisher();
- p2.setName("publisher2");
- em.persist(p2);
-
- for (int i = 0; i < 4; i++) {
- Magazine magazine = new Magazine();
- magazine.setIdPublisher(p2);
- magazine.setName("magagine"+i+"_"+p2.getName());
- em.persist(magazine);
- }
-
+
em.flush();
em.getTransaction().commit();
em.close();
@@ -224,33 +197,6 @@
em.close();
}
- public void testOneToManyEagerInverseLazyQuery() {
- sql.clear();
-
- OpenJPAEntityManager em = emf.createEntityManager();
- String query = "select p FROM Publisher p";
- Query q = em.createQuery(query);
- List list = q.getResultList();
- assertEquals(2, list.size());
- assertEquals(2, sql.size());
-
- sql.clear();
- em.clear();
- for (int i = 0; i < list.size(); i++) {
- Publisher p = (Publisher) list.get(i);
- Set<Magazine> magazines = p.getMagazineCollection();
- assertEquals(4, magazines.size());
- for (Iterator iter = magazines.iterator(); iter.hasNext();) {
- Magazine m = (Magazine) iter.next();
- Publisher mp = m.getIdPublisher();
- assertEquals(p, mp);
- }
- }
-
- assertEquals(0, sql.size());
- em.close();
- }
-
public static void main(String[] args) {
TestRunner.run(TestInverseEagerSQL.class);
}