Author: awhite Date: Tue Feb 27 10:14:45 2007 New Revision: 512350 URL: http://svn.apache.org/viewvc?view=rev&rev=512350 Log: Improve error checks for mapped-by mappings. Mark deleted instances as eligible for state restore on rollback so they don't always clear. Always cascade attach to embedded instances.
Modified: incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/RelationFieldStrategy.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/meta/strats/RelationToManyTableFieldStrategy.java incubator/openjpa/trunk/openjpa-jdbc/src/main/resources/org/apache/openjpa/jdbc/meta/strats/localizer.properties incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/PDeletedState.java incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ValueMetaDataImpl.java Modified: incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/RelationFieldStrategy.java URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/RelationFieldStrategy.java?view=diff&rev=512350&r1=512349&r2=512350 ============================================================================== --- incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/RelationFieldStrategy.java (original) +++ incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/RelationFieldStrategy.java Tue Feb 27 10:14:45 2007 @@ -86,7 +86,7 @@ field.getValueInfo().assertNoSchemaComponents(field, !adapt); mapped.resolve(mapped.MODE_META | mapped.MODE_MAPPING); - if (!mapped.getDefiningMapping().isMapped()) + if (!mapped.isMapped() || mapped.isSerialized()) throw new MetaDataException(_loc.get("mapped-by-unmapped", field, mapped)); 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=512350&r1=512349&r2=512350 ============================================================================== --- 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 Feb 27 10:14:45 2007 @@ -119,7 +119,7 @@ boolean criteria = vinfo.getUseClassCriteria(); if (mapped != null) { mapped.resolve(mapped.MODE_META | mapped.MODE_MAPPING); - if (!(mapped.getStrategy()instanceof RelationFieldStrategy)) + if (!(mapped.getStrategy() instanceof RelationFieldStrategy)) throw new MetaDataException(_loc.get("not-inv-relation", field, mapped)); vinfo.assertNoSchemaComponents(elem, !adapt); Modified: incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/RelationToManyTableFieldStrategy.java URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/RelationToManyTableFieldStrategy.java?view=diff&rev=512350&r1=512349&r2=512350 ============================================================================== --- incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/RelationToManyTableFieldStrategy.java (original) +++ incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/RelationToManyTableFieldStrategy.java Tue Feb 27 10:14:45 2007 @@ -110,7 +110,7 @@ vinfo.assertNoSchemaComponents(elem, !adapt); mapped.resolve(mapped.MODE_META | mapped.MODE_MAPPING); - if (!mapped.getDefiningMapping().isMapped()) + if (!mapped.isMapped() || mapped.isSerialized()) throw new MetaDataException(_loc.get("mapped-by-unmapped", field, mapped)); Modified: incubator/openjpa/trunk/openjpa-jdbc/src/main/resources/org/apache/openjpa/jdbc/meta/strats/localizer.properties URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-jdbc/src/main/resources/org/apache/openjpa/jdbc/meta/strats/localizer.properties?view=diff&rev=512350&r1=512349&r2=512350 ============================================================================== --- incubator/openjpa/trunk/openjpa-jdbc/src/main/resources/org/apache/openjpa/jdbc/meta/strats/localizer.properties (original) +++ incubator/openjpa/trunk/openjpa-jdbc/src/main/resources/org/apache/openjpa/jdbc/meta/strats/localizer.properties Tue Feb 27 10:14:45 2007 @@ -20,7 +20,7 @@ "{2}". You cannot use an inverse foreign key to map a superclass field of \ an unjoined subclass. mapped-by-unmapped: Field "{0}" cannot be mapped by "{1}", because the related \ - type is unmapped. + field or type is unmapped. cant-join: Cannot join across "{0}". The related type has unjoined subclasses. cant-inverse: "{0}" is not a valid mapping. Inverse foreign key-based \ relations to types with unjoined subclasses are not supported. Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/PDeletedState.java URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/PDeletedState.java?view=diff&rev=512350&r1=512349&r2=512350 ============================================================================== --- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/PDeletedState.java (original) +++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/PDeletedState.java Tue Feb 27 10:14:45 2007 @@ -25,6 +25,10 @@ class PDeletedState extends PCState { + void initialize(StateManagerImpl context) { + context.saveFields(false); + } + PCState flush(StateManagerImpl context) { return PDELETEDFLUSHED; } Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ValueMetaDataImpl.java URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ValueMetaDataImpl.java?view=diff&rev=512350&r1=512349&r2=512350 ============================================================================== --- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ValueMetaDataImpl.java (original) +++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ValueMetaDataImpl.java Tue Feb 27 10:14:45 2007 @@ -243,6 +243,8 @@ if (_owner.getManagement() != FieldMetaData.MANAGE_PERSISTENT || !isDeclaredTypePC()) // attach acts on declared type return CASCADE_NONE; + if (isEmbeddedPC()) + return CASCADE_IMMEDIATE; return _attach; }