You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by jr...@apache.org on 2009/05/13 05:04:58 UTC
svn commit: r774177 - in /openjpa/trunk:
openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/access/
openjpa-persistence/src/main/java/org/apache/openjpa/persistence/
Author: jrbauer
Date: Wed May 13 03:04:58 2009
New Revision: 774177
URL: http://svn.apache.org/viewvc?rev=774177&view=rev
Log:
OPENJPA-926 Add annotation support for embeddables and correct Transient issue
Modified:
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/access/TestExplicitAccess.java
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/AnnotationPersistenceMetaDataParser.java
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceMetaDataDefaults.java
Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/access/TestExplicitAccess.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/access/TestExplicitAccess.java?rev=774177&r1=774176&r2=774177&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/access/TestExplicitAccess.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/access/TestExplicitAccess.java Wed May 13 03:04:58 2009
@@ -26,14 +26,11 @@
import javax.persistence.Query;
-import org.apache.openjpa.jdbc.ant.ReverseMappingToolTask.AccessType;
import org.apache.openjpa.meta.AccessCode;
import org.apache.openjpa.meta.ClassMetaData;
-import org.apache.openjpa.meta.FieldMetaData;
import org.apache.openjpa.meta.MetaDataRepository;
import org.apache.openjpa.persistence.ArgumentException;
import org.apache.openjpa.persistence.OpenJPAEntityManagerSPI;
-import org.apache.openjpa.persistence.test.AllowFailure;
import org.apache.openjpa.persistence.test.SingleEMFTestCase;
public class TestExplicitAccess extends SingleEMFTestCase {
@@ -48,17 +45,15 @@
AbstractMappedSuperProperty.class, FieldSub.class,
MappedSuperProperty.class, FieldSub2.class,
SuperPropertyEntity.class, FieldSub3.class,
- MixedMappedSuper.class, MixedFieldSub.class //,
- // These persistent types are commented out until
- // support for embeddable access types is complete
-// FieldEmbedEntity.class, EmbedFieldAccess.class,
-// PropEmbedEntity.class, EmbedPropAccess.class,
-// PropMixedEntity.class, EmbedMixedAccess.class,
-// MixedNestedEmbedEntity.class, EmbedInnerProp.class,
-// EmbedOuterField.class, MixedMultEmbedEntity.class,
-// FieldAccessPropStratsEntity.class,
-// PropAccessFieldStratsEntity.class,
- /* EmbedId.class */);
+ MixedMappedSuper.class, MixedFieldSub.class,
+ FieldEmbedEntity.class, EmbedFieldAccess.class,
+ PropEmbedEntity.class, EmbedPropAccess.class,
+ PropMixedEntity.class, EmbedMixedAccess.class,
+ MixedNestedEmbedEntity.class, EmbedInnerProp.class,
+ EmbedOuterField.class, MixedMultEmbedEntity.class,
+ FieldAccessPropStratsEntity.class,
+ PropAccessFieldStratsEntity.class,
+ EmbedId.class);
}
@@ -626,8 +621,6 @@
* Validates an embeddable with field access can be used within an
* entity with property access
*/
- @AllowFailure(value=true,
- message="Support for explicit Access on embeddables is not complete.")
public void testEmbeddablesField() {
OpenJPAEntityManagerSPI em = emf.createEntityManager();
@@ -675,8 +668,6 @@
* Validates an embeddable with property access can be used within an
* entity with field access
*/
- @AllowFailure(value=true,
- message="Support for explicit Access on embeddables is not complete.")
public void testEmbeddablesProperty() {
OpenJPAEntityManagerSPI em = emf.createEntityManager();
@@ -724,8 +715,6 @@
* Validates an embeddable with mixed access can be used within an
* entity with mixed access
*/
- @AllowFailure(value=true,
- message="Support for explicit Access on embeddables is not complete.")
public void testMixedEmbeddables() {
OpenJPAEntityManagerSPI em = emf.createEntityManager();
@@ -776,8 +765,6 @@
* Validates that a mix of access types can be used within
* an embeddable stack.
*/
- @AllowFailure(value=true,
- message="Support for explicit Access on embeddables is not complete.")
public void testNestedEmbeddables() {
OpenJPAEntityManagerSPI em = emf.createEntityManager();
@@ -828,8 +815,6 @@
* Validates that a mix of access types can be used by an
* an entity with mulitple embeddables.
*/
- @AllowFailure(value=true,
- message="Support for explicit Access on embeddables is not complete.")
public void testMultipleEmbeddables() {
OpenJPAEntityManagerSPI em = emf.createEntityManager();
@@ -901,8 +886,6 @@
* strategies from within an entity with explicit field access (except for
* the id field, which is field default)
*/
- @AllowFailure(value=true,
- message="Support for explicit Access on embeddables is not complete.")
public void testPropertyAccessStrategies() {
OpenJPAEntityManagerSPI em = emf.createEntityManager();
@@ -995,8 +978,6 @@
* strategies from within an entity with explicit property access (except
* for the id field, which is property default)
*/
- @AllowFailure(value=true,
- message="Support for explicit Access on embeddables is not complete.")
public void testFieldAccessStrategies() {
OpenJPAEntityManagerSPI em = emf.createEntityManager();
Modified: openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/AnnotationPersistenceMetaDataParser.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/AnnotationPersistenceMetaDataParser.java?rev=774177&r1=774176&r2=774177&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/AnnotationPersistenceMetaDataParser.java (original)
+++ openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/AnnotationPersistenceMetaDataParser.java Wed May 13 03:04:58 2009
@@ -1446,7 +1446,7 @@
fmd.setEmbedded(true);
if (fmd.getEmbeddedMetaData() == null)
- fmd.addEmbeddedMetaData();
+ fmd.addEmbeddedMetaData(getAccessCode(fmd.getDeclaredType()));
}
/**
@@ -1577,7 +1577,7 @@
"Persistent(embedded=true)"));
fmd.setEmbedded(true);
if (fmd.getEmbeddedMetaData() == null) {
- fmd.addEmbeddedMetaData();
+ fmd.addEmbeddedMetaData(getAccessCode(fmd.getDeclaredType()));
}
}
}
@@ -1604,7 +1604,8 @@
"PersistentCollection(embeddedElement=true)"));
fmd.getElement().setEmbedded(true);
if (fmd.getElement().getEmbeddedMetaData() == null) {
- fmd.getElement().addEmbeddedMetaData();
+ fmd.getElement().addEmbeddedMetaData(
+ getAccessCode(fmd.getElement().getDeclaredType()));
}
}
}
@@ -1630,7 +1631,7 @@
if (!isEnum && JavaTypes.maybePC(elem)) {
elem.setEmbedded(true);
if (elem.getEmbeddedMetaData() == null)
- elem.addEmbeddedMetaData();
+ elem.addEmbeddedMetaData(getAccessCode(elem.getDeclaredType()));
}
}
@@ -1655,7 +1656,8 @@
"PersistentMap(embeddedKey=true)"));
fmd.getKey().setEmbedded(true);
if (fmd.getKey().getEmbeddedMetaData() == null) {
- fmd.getKey().addEmbeddedMetaData();
+ fmd.getKey().addEmbeddedMetaData(
+ getAccessCode(fmd.getKey().getDeclaredType()));
}
}
if (anno.elementEmbedded()) {
@@ -1664,7 +1666,8 @@
"PersistentMap(embeddedValue=true)"));
fmd.getElement().setEmbedded(true);
if (fmd.getElement().getEmbeddedMetaData() == null)
- fmd.getElement().addEmbeddedMetaData();
+ fmd.getElement().addEmbeddedMetaData(
+ getAccessCode(fmd.getElement().getDeclaredType()));
}
}
Modified: openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceMetaDataDefaults.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceMetaDataDefaults.java?rev=774177&r1=774176&r2=774177&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceMetaDataDefaults.java (original)
+++ openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceMetaDataDefaults.java Wed May 13 03:04:58 2009
@@ -594,7 +594,12 @@
return member != null && member instanceof AnnotatedElement
&& annotatedFilter.includes((AnnotatedElement)member);
}
-
+
+ private boolean isNotTransient(Member member) {
+ return member != null && member instanceof AnnotatedElement
+ && nonTransientFilter.includes((AnnotatedElement)member);
+ }
+
/**
* Gets either the instance field or the getter method depending upon the
* access style of the given meta-data.
@@ -609,7 +614,8 @@
access;
if (field == null && getter == null)
error(meta, _loc.get("access-no-property", cls, property));
- if (isAnnotated(field) && isAnnotated(getter))
+ if ((isNotTransient(getter) && isAnnotated(getter)) &&
+ isNotTransient(field) && isAnnotated(field))
throw new IllegalStateException(_loc.get("access-duplicate",
field, getter).toString());