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 ); } |