|
From: <hib...@li...> - 2006-05-31 08:23:00
|
Author: epbernard
Date: 2006-05-31 04:22:57 -0400 (Wed, 31 May 2006)
New Revision: 9967
Modified:
trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationConfiguration.java
trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/EJB3OverridenAnnotationReader.java
Log:
ANN-355 adjust XML access type discovery rules
Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationConfiguration.java
===================================================================
--- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationConfiguration.java 2006-05-31 08:13:43 UTC (rev 9966)
+++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationConfiguration.java 2006-05-31 08:22:57 UTC (rev 9967)
@@ -557,6 +557,7 @@
try {
saxReader.setFeature( "http://apache.org/xml/features/validation/schema", true );
//saxReader.setFeature( "http://apache.org/xml/features/validation/dynamic", true );
+ //set the default schema locators
saxReader.setProperty( "http://apache.org/xml/properties/schema/external-schemaLocation",
"http://java.sun.com/xml/ns/persistence/orm orm_1_0.xsd");
}
Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/EJB3OverridenAnnotationReader.java
===================================================================
--- trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/EJB3OverridenAnnotationReader.java 2006-05-31 08:13:43 UTC (rev 9966)
+++ trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/EJB3OverridenAnnotationReader.java 2006-05-31 08:22:57 UTC (rev 9967)
@@ -815,9 +815,10 @@
private void getEmbeddedId(List<Annotation> annotationList, XMLContext.Default defaults) {
for ( Element element : elementsForProperty ) {
if ( "embedded-id".equals( element.getName() ) ) {
- boolean properAccessOnMetadataComplete = computeProperAccessOnMetadataComplete( defaults );
- boolean properOverridingOnMetadataNonComplete = computeProperOverridingOnMetadataComplete( defaults );
- if ( properAccessOnMetadataComplete || properOverridingOnMetadataNonComplete ) {
+ //boolean properAccessOnMetadataComplete = computeProperAccessOnMetadataComplete( defaults );
+ //boolean properOverridingOnMetadataNonComplete = computeProperOverridingOnMetadataNonComplete( defaults );
+ //if ( properAccessOnMetadataComplete || properOverridingOnMetadataNonComplete ) {
+ if ( isProcessingId( defaults ) ) {
Annotation annotation = getAttributeOverrides( element, defaults );
if ( annotation != null ) annotationList.add( annotation );
annotation = getAssociationOverrides( element, defaults );
@@ -825,21 +826,21 @@
AnnotationDescriptor ad = new AnnotationDescriptor( EmbeddedId.class );
annotationList.add( AnnotationFactory.create( ad ) );
}
- else {
- if ( defaults.canUseJavaAnnotations() ) {
- if ( ! properOverridingOnMetadataNonComplete ) {
- //check that id exists on the other attribute
- //TODO Id too?
- if ( mirroredAttribute == null || ! mirroredAttribute.isAnnotationPresent(
- EmbeddedId.class
- ) ) {
- throw new AnnotationException(
- "Cannot override an property with <embedded-id> not having an @EmbeddedId already"
- );
- }
- }
- }
- }
+// else {
+// if ( defaults.canUseJavaAnnotations() ) {
+// if ( ! properOverridingOnMetadataNonComplete ) {
+// //check that id exists on the other attribute
+// //TODO Id too?
+// if ( mirroredAttribute == null || ! mirroredAttribute.isAnnotationPresent(
+// EmbeddedId.class
+// ) ) {
+// throw new AnnotationException(
+// "Cannot override an property with <embedded-id> not having an @EmbeddedId already"
+// );
+// }
+// }
+// }
+// }
}
}
if ( elementsForProperty.size() == 0 && defaults.canUseJavaAnnotations() ) {
@@ -894,9 +895,10 @@
private void getId(List<Annotation> annotationList, XMLContext.Default defaults) {
for ( Element element : elementsForProperty ) {
if ( "id".equals( element.getName() ) ) {
- boolean properAccessOnMetadataComplete = computeProperAccessOnMetadataComplete( defaults );
- boolean properOverridingOnMetadataNonComplete = computeProperOverridingOnMetadataComplete( defaults );
- if ( properAccessOnMetadataComplete || properOverridingOnMetadataNonComplete ) {
+ //boolean properAccessOnMetadataComplete = computeProperAccessOnMetadataComplete( defaults );
+ //boolean properOverridingOnMetadataNonComplete = computeProperOverridingOnMetadataNonComplete( defaults );
+ boolean processId = isProcessingId( defaults );
+ if ( processId ) {
Annotation annotation = buildColumns( element );
if ( annotation != null ) annotationList.add( annotation );
annotation = buildGeneratedValue( element );
@@ -910,19 +912,19 @@
AnnotationDescriptor id = new AnnotationDescriptor( Id.class );
annotationList.add( AnnotationFactory.create( id ) );
}
- else {
- if ( defaults.canUseJavaAnnotations() ) {
- if ( ! properOverridingOnMetadataNonComplete ) {
- //check that id exists on the other attribute
- //TODO EmbeddedId too?
- if ( mirroredAttribute == null || ! mirroredAttribute.isAnnotationPresent( Id.class ) ) {
- throw new AnnotationException(
- "Cannot override an property with <id> it does not have an @Id already"
- );
- }
- }
- }
- }
+// else {
+// if ( defaults.canUseJavaAnnotations() ) {
+// if ( ! properOverridingOnMetadataNonComplete ) {
+// //check that id exists on the other attribute
+// //TODO EmbeddedId too?
+// if ( mirroredAttribute == null || ! mirroredAttribute.isAnnotationPresent( Id.class ) ) {
+// throw new AnnotationException(
+// "Cannot override a property with <id> it does not have an @Id already"
+// );
+// }
+// }
+// }
+// }
}
}
if ( elementsForProperty.size() == 0 && defaults.canUseJavaAnnotations() ) {
@@ -953,7 +955,23 @@
}
}
- private boolean computeProperOverridingOnMetadataComplete(XMLContext.Default defaults) {
+ private boolean isProcessingId(XMLContext.Default defaults) {
+ boolean isExplicit = defaults.getAccess() != null;
+ boolean correctAccess =
+ ( PropertyType.PROPERTY.equals( propertyType ) && "property".equalsIgnoreCase( defaults.getAccess() ) )
+ || ( PropertyType.FIELD.equals( propertyType ) && "field".equalsIgnoreCase( defaults.getAccess() ) );
+ boolean hasId = defaults.canUseJavaAnnotations()
+ && ( super.isAnnotationPresent( Id.class ) || super.isAnnotationPresent( EmbeddedId.class ) );
+ //if ( properAccessOnMetadataComplete || properOverridingOnMetadataNonComplete ) {
+ boolean mirrorAttributeIsId = defaults.canUseJavaAnnotations() &&
+ ( mirroredAttribute.isAnnotationPresent(Id.class)
+ || mirroredAttribute.isAnnotationPresent( EmbeddedId.class ) );
+ boolean propertyIsDefault = PropertyType.PROPERTY.equals( propertyType )
+ && ! mirrorAttributeIsId;
+ return correctAccess || ( ! isExplicit && hasId ) || ( ! isExplicit && propertyIsDefault );
+ }
+
+ private boolean computeProperOverridingOnMetadataNonComplete(XMLContext.Default defaults) {
return defaults.canUseJavaAnnotations()
&& super.isAnnotationPresent( Id.class );
}
|