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 2009/03/10 18:41:43 UTC
svn commit: r752181 -
/openjpa/branches/1.3.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/ClassMapping.java
Author: faywang
Date: Tue Mar 10 17:41:40 2009
New Revision: 752181
URL: http://svn.apache.org/viewvc?rev=752181&view=rev
Log:
OPENJPA-679: fix ReverseMappingTool problem
Modified:
openjpa/branches/1.3.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/ClassMapping.java
Modified: openjpa/branches/1.3.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/ClassMapping.java
URL: http://svn.apache.org/viewvc/openjpa/branches/1.3.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/ClassMapping.java?rev=752181&r1=752180&r2=752181&view=diff
==============================================================================
--- openjpa/branches/1.3.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/ClassMapping.java (original)
+++ openjpa/branches/1.3.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/ClassMapping.java Tue Mar 10 17:41:40 2009
@@ -35,7 +35,6 @@
import org.apache.openjpa.jdbc.kernel.JDBCFetchConfiguration;
import org.apache.openjpa.jdbc.kernel.JDBCStore;
import org.apache.openjpa.jdbc.meta.strats.NoneClassStrategy;
-import org.apache.openjpa.jdbc.meta.strats.RelationFieldStrategy;
import org.apache.openjpa.jdbc.schema.Column;
import org.apache.openjpa.jdbc.schema.ColumnIO;
import org.apache.openjpa.jdbc.schema.ForeignKey;
@@ -54,10 +53,10 @@
import org.apache.openjpa.meta.ClassMetaData;
import org.apache.openjpa.meta.ValueMetaData;
import org.apache.openjpa.util.ApplicationIds;
+import org.apache.openjpa.util.ImplHelper;
import org.apache.openjpa.util.InternalException;
import org.apache.openjpa.util.MetaDataException;
import org.apache.openjpa.util.OpenJPAId;
-import org.apache.openjpa.util.ImplHelper;
/**
* Specialization of metadata for relational databases.
@@ -89,7 +88,6 @@
// maps columns to joinables
private final Map _joinables = Collections.synchronizedMap(new HashMap());
- private boolean redoPrimaryKeyColumns = false;
/**
* Constructor. Supply described type and owning repository.
@@ -418,18 +416,15 @@
*/
public Column[] getPrimaryKeyColumns() {
if (getIdentityType() == ID_APPLICATION && isMapped()) {
- if (_cols.length == 0 || redoPrimaryKeyColumns) {
+ if (_cols.length == 0) {
FieldMapping[] pks = getPrimaryKeyFieldMappings();
Collection cols = new ArrayList(pks.length);
Column[] fieldCols;
for (int i = 0; i < pks.length; i++) {
fieldCols = pks[i].getColumns();
if (fieldCols.length == 0) {
- // some pk columns depends on fk. At this moment,
- // the fk may not contain complete information.
- // need to redo the primary key again later on
- redoPrimaryKeyColumns = true;
- continue;
+ _cols = new Column[0];
+ return _cols;
}
for (int j = 0; j < fieldCols.length; j++)
cols.add(fieldCols[j]);
@@ -835,8 +830,11 @@
FieldMapping[] fms = getFieldMappings();
for (int i = 0; i < fms.length; i++) {
if (fms[i].getDefiningMetaData() == this) {
- if (fms[i].getForeignKey() != null &&
- fms[i].getStrategy() instanceof RelationFieldStrategy) {
+ boolean fill = getMappingRepository().getMappingDefaults().
+ defaultMissingInfo();
+ ForeignKey fk = fms[i].getForeignKey();
+ if (fill && fk != null &&
+ fk.getPrimaryKeyColumns().length == 0) {
// set resolve mode to force this field mapping to be
// resolved again. The need to resolve again occurs when
// a primary key is a relation field with the foreign key
@@ -845,11 +843,10 @@
// resolveNonRelationMapping. Since it is a relation
// field, the foreign key will be constructed. However,
// the primary key of the parent entity may not have been
- // resolved yet, resulting in missing informaiton in the fk
+ // resolved yet, resulting in missing information in the fk
fms[i].setResolve(MODE_META);
-
- // set strategy to null to force fk to be re-constructed
- fms[i].setStrategy(null, false);
+ if (fms[i].getStrategy() != null)
+ fms[i].getStrategy().map(false);
}
fms[i].resolve(MODE_MAPPING);
}