You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by aw...@apache.org on 2006/10/10 22:56:32 UTC
svn commit: r462560 - in
/incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc:
kernel/PagingResultObjectProvider.java
meta/strats/RelationToManyInverseKeyFieldStrategy.java sql/SelectImpl.java
Author: awhite
Date: Tue Oct 10 13:56:32 2006
New Revision: 462560
URL: http://svn.apache.org/viewvc?view=rev&rev=462560
Log:
Vertical inheritance with eager fetching fixes.
Modified:
incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/PagingResultObjectProvider.java
incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/RelationToManyInverseKeyFieldStrategy.java
incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java
Modified: incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/PagingResultObjectProvider.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/PagingResultObjectProvider.java?view=diff&rev=462560&r1=462559&r2=462560
==============================================================================
--- incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/PagingResultObjectProvider.java (original)
+++ incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/PagingResultObjectProvider.java Tue Oct 10 13:56:32 2006
@@ -383,10 +383,7 @@
(_page[j]), store, fetch, res);
} finally {
if (res instanceof Closeable)
- try {
- ((Closeable) res).close();
- } catch (Exception e) {
- }
+ try { ((Closeable) res).close(); } catch (Exception e) {}
}
}
}
Modified: incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/RelationToManyInverseKeyFieldStrategy.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/RelationToManyInverseKeyFieldStrategy.java?view=diff&rev=462560&r1=462559&r2=462560
==============================================================================
--- incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/RelationToManyInverseKeyFieldStrategy.java (original)
+++ incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/RelationToManyInverseKeyFieldStrategy.java Tue Oct 10 13:56:32 2006
@@ -40,6 +40,7 @@
import org.apache.openjpa.lib.util.Localizer;
import org.apache.openjpa.meta.JavaTypes;
import org.apache.openjpa.util.ChangeTracker;
+import org.apache.openjpa.util.InternalException;
import org.apache.openjpa.util.MetaDataException;
import org.apache.openjpa.util.Proxies;
import org.apache.openjpa.util.Proxy;
@@ -85,8 +86,16 @@
protected Joins join(Joins joins, ClassMapping elem) {
ValueMapping vm = field.getElementMapping();
- return joins.joinRelation(field.getName(), vm.getForeignKey(elem),
- elem, vm.getSelectSubclasses(), true, true);
+ ForeignKey fk = vm.getForeignKey(elem);
+ ClassMapping owner = field.getDefiningMapping();
+ while (fk.getPrimaryKeyTable() != owner.getTable()) {
+ joins = owner.joinSuperclass(joins, false);
+ owner = owner.getJoinablePCSuperclassMapping();
+ if (owner == null)
+ throw new InternalException();
+ }
+ return joins.joinRelation(field.getName(), fk, elem,
+ vm.getSelectSubclasses(), true, true);
}
protected Joins joinElementRelation(Joins joins, ClassMapping elem) {
Modified: incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java?view=diff&rev=462560&r1=462559&r2=462560
==============================================================================
--- incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java (original)
+++ incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java Tue Oct 10 13:56:32 2006
@@ -1121,6 +1121,15 @@
(mapping.getPrimaryKeyColumns(), fk.getPrimaryKeyColumns())) {
if (joins == null)
joins = newJoins();
+ // traverse to foreign key target mapping
+ while (mapping.getTable() != fk.getPrimaryKeyTable()) {
+ if (joins == null)
+ joins = newJoins();
+ joins = mapping.joinSuperclass(joins, false);
+ mapping = mapping.getJoinablePCSuperclassMapping();
+ if (mapping == null)
+ throw new InternalException();
+ }
joins = joins.join(fk, false, false);
wherePrimaryKey(oid, mapping, joins, store);
return;
@@ -1159,8 +1168,7 @@
int count = 0;
for (int i = 0; i < toCols.length; i++, count++) {
if (pks == null)
- val = (oid == null) ? null
- : Numbers.valueOf(((Id) oid).getId());
+ val = (oid == null) ? null : Numbers.valueOf(((Id)oid).getId());
else {
// must be app identity; use pk index to get correct pk value
join = mapping.assertJoinable(toCols[i]);
@@ -2556,9 +2564,19 @@
// the joins will all be done in the from select
boolean createJoin = _sel._from == null;
Table table1 = null;
+ Table table2 = null;
int alias1 = -1;
if (createJoin) {
table1 = (inverse) ? fk.getPrimaryKeyTable() : fk.getTable();
+ table2 = (inverse) ? fk.getTable() : fk.getPrimaryKeyTable();
+ if (target != null) {
+ while (target.getTable() != table2) {
+ target.joinSuperclass(this, false);
+ target = target.getJoinablePCSuperclassMapping();
+ if (target == null)
+ throw new InternalException();
+ }
+ }
alias1 = _sel.getTableIndex(table1, this, true);
}
@@ -2572,10 +2590,7 @@
_outer = outer;
if (createJoin) {
- Table table2 = (inverse) ? fk.getTable()
- : fk.getPrimaryKeyTable();
int alias2 = _sel.getTableIndex(table2, this, true);
-
Join j = new Join(table1, alias1, table2, alias2, fk, inverse);
j.setType((outer) ? Join.TYPE_OUTER : Join.TYPE_INNER);