Author: epbernard
Date: 2006-04-26 02:20:18 -0400 (Wed, 26 Apr 2006)
New Revision: 9793
Added:
trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/
trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/ejb3/
trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/ejb3/CarModel.java
trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/ejb3/Ejb3XmlTest.java
trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/ejb3/Light.java
trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/ejb3/Lighter.java
trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/ejb3/Manufacturer.java
trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/ejb3/Model.java
trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/ejb3/orm.xml
trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/ejb3/orm2.xml
trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/ejb3/orm3.xml
trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/hbm/
trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/hbm/HbmTest.java
Removed:
trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/mixed/
trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/hbm/MixedTest.java
Modified:
trunk/HibernateExt/metadata/build.xml
trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AbstractPropertyHolder.java
trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationBinder.java
trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationConfiguration.java
trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/ClassPropertyHolder.java
trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/CollectionPropertyHolder.java
trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/ComponentPropertyHolder.java
trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/Ejb3JoinColumn.java
trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/ExtendedMappings.java
trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/InheritanceState.java
trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/PropertyHolderBuilder.java
trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/CollectionBinder.java
trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/EntityBinder.java
trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/ListBinder.java
trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/MapBinder.java
trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/PropertyBinder.java
trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/SimpleValueBinder.java
trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/ReflectionManager.java
trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/EJB3OverridenAnnotationReader.java
trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/JavaXAnnotatedElement.java
trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/JavaXFactory.java
trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/xml/XMLContext.java
trunk/HibernateExt/metadata/src/java/org/hibernate/validator/ClassValidator.java
trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/TestCase.java
trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/hbm/Government.hbm.xml
trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/hbm/Government.java
trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/xml/hbm/PrimeMinister.java
trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/JavaReflectionManagerTest.java
trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/JavaXClassTest.java
trunk/HibernateExt/metadata/src/test/org/hibernate/test/reflection/java/JavaXPropertyTest.java
Log:
ANN-322
Modified: trunk/HibernateExt/metadata/build.xml
===================================================================
--- trunk/HibernateExt/metadata/build.xml 2006-04-25 20:56:10 UTC (rev 9792)
+++ trunk/HibernateExt/metadata/build.xml 2006-04-26 06:20:18 UTC (rev 9793)
@@ -43,6 +43,7 @@
<copy todir="${classes.dir}">
<fileset dir="${src.dir}">
<include name="**/resources/*.properties"/>
+ <include name="**/*.xsd"/>
</fileset>
</copy>
</target>
Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AbstractPropertyHolder.java
===================================================================
--- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AbstractPropertyHolder.java 2006-04-25 20:56:10 UTC (rev 9792)
+++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AbstractPropertyHolder.java 2006-04-26 06:20:18 UTC (rev 9793)
@@ -3,17 +3,16 @@
import java.util.HashMap;
import java.util.Map;
+import javax.persistence.AssociationOverride;
+import javax.persistence.AssociationOverrides;
import javax.persistence.AttributeOverride;
import javax.persistence.AttributeOverrides;
import javax.persistence.Column;
import javax.persistence.Embeddable;
import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
import javax.persistence.MappedSuperclass;
-import javax.persistence.JoinColumn;
-import javax.persistence.AssociationOverride;
-import javax.persistence.AssociationOverrides;
-import org.hibernate.reflection.ReflectionManager;
import org.hibernate.reflection.XAnnotatedElement;
import org.hibernate.reflection.XClass;
import org.hibernate.reflection.XProperty;
@@ -29,10 +28,12 @@
private Map<String, JoinColumn[]> holderJoinColumnOverride;
private Map<String, JoinColumn[]> currentPropertyJoinColumnOverride;
private String path;
+ private ExtendedMappings mappings;
- public AbstractPropertyHolder(String path, PropertyHolder parent, XClass clazzToProcess) {
+ public AbstractPropertyHolder(String path, PropertyHolder parent, XClass clazzToProcess, ExtendedMappings mappings) {
this.path = path;
this.parent = parent;
+ this.mappings = mappings;
buildHierarchyColumnOverride( clazzToProcess );
}
@@ -104,7 +105,7 @@
XClass current = element;
Map<String, Column[]> columnOverride = new HashMap<String, Column[]>();
Map<String, JoinColumn[]> joinColumnOverride = new HashMap<String, JoinColumn[]>();
- while ( current != null && ! ReflectionManager.INSTANCE.toXClass( Object.class ).equals( current ) ) {
+ while ( current != null && ! mappings.getReflectionManager().toXClass( Object.class ).equals( current ) ) {
if ( current.isAnnotationPresent( Entity.class) || current.isAnnotationPresent( MappedSuperclass.class)
|| current.isAnnotationPresent( Embeddable.class) ) {
//FIXME is embeddable override?
Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationBinder.java
===================================================================
--- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationBinder.java 2006-04-25 20:56:10 UTC (rev 9792)
+++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationBinder.java 2006-04-26 06:20:18 UTC (rev 9793)
@@ -111,11 +111,11 @@
import org.hibernate.persister.entity.JoinedSubclassEntityPersister;
import org.hibernate.persister.entity.SingleTableEntityPersister;
import org.hibernate.persister.entity.UnionSubclassEntityPersister;
-import org.hibernate.reflection.ReflectionManager;
import org.hibernate.reflection.XAnnotatedElement;
import org.hibernate.reflection.XClass;
import org.hibernate.reflection.XPackage;
import org.hibernate.reflection.XProperty;
+import org.hibernate.reflection.ReflectionManager;
import org.hibernate.type.ForeignKeyDirection;
import org.hibernate.type.TypeFactory;
import org.hibernate.util.StringHelper;
@@ -155,7 +155,7 @@
public static void bindPackage(String packageName, ExtendedMappings mappings) {
XPackage pckg = null;
try {
- pckg = ReflectionManager.INSTANCE.packageForName( packageName );
+ pckg = mappings.getReflectionManager().packageForName( packageName );
}
catch (ClassNotFoundException cnf) {
log.warn( "Package not found or wo package-info.java: " + packageName );
@@ -336,7 +336,7 @@
XAnnotatedElement annotatedClass = clazzToProcess;
if ( log.isInfoEnabled() ) log.info("Binding entity from annotated class: " + clazzToProcess.getName() );
InheritanceState superEntityState =
- InheritanceState.getSuperEntityInheritanceState( clazzToProcess, inheritanceStatePerClass);
+ InheritanceState.getSuperEntityInheritanceState( clazzToProcess, inheritanceStatePerClass, mappings.getReflectionManager() );
PersistentClass superEntity = superEntityState != null ? mappings.getClass( superEntityState.clazz.getName() ) : null;
if ( superEntity == null ) {
//check if superclass is not a potential persistent class
@@ -490,7 +490,7 @@
PropertyHolder propertyHolder = PropertyHolderBuilder.buildPropertyHolder(
clazzToProcess,
persistentClass,
- entityBinder.getSecondaryTables()
+ entityBinder.getSecondaryTables(), mappings
);
javax.persistence.SecondaryTable secTabAnn = annotatedClass.getAnnotation(
@@ -560,7 +560,7 @@
// check properties
List<PropertyData> elements =
- getElementsToProcess( clazzToProcess, inheritanceStatePerClass, propertyHolder, entityBinder );
+ getElementsToProcess( clazzToProcess, inheritanceStatePerClass, propertyHolder, entityBinder, mappings );
if ( elements == null ) {
throw new AnnotationException( "No identifier specified for entity: " + propertyHolder.getEntityName() );
}
@@ -579,11 +579,11 @@
idClass = current.getAnnotation( IdClass.class );
break;
}
- state = InheritanceState.getSuperclassInheritanceState( current, inheritanceStatePerClass );
+ state = InheritanceState.getSuperclassInheritanceState( current, inheritanceStatePerClass, mappings.getReflectionManager() );
} while (state != null);
}
if ( idClass != null ) {
- XClass compositeClass = ReflectionManager.INSTANCE.toXClass( idClass.value() );
+ XClass compositeClass = mappings.getReflectionManager().toXClass( idClass.value() );
boolean isComponent = true;
boolean propertyAnnotated = entityBinder.isPropertyAnnotated( compositeClass );
String propertyAccessor = entityBinder.getPropertyAccessor( compositeClass );
@@ -688,11 +688,11 @@
*/
private static List<PropertyData> getElementsToProcess(
XClass clazzToProcess, Map<XClass, InheritanceState> inheritanceStatePerClass,
- PropertyHolder propertyHolder, EntityBinder entityBinder
+ PropertyHolder propertyHolder, EntityBinder entityBinder, ExtendedMappings mappings
) {
InheritanceState inheritanceState = inheritanceStatePerClass.get(clazzToProcess);
List<XClass> classesToProcess = orderClassesToBeProcessed(
- clazzToProcess, inheritanceStatePerClass, inheritanceState
+ clazzToProcess, inheritanceStatePerClass, inheritanceState, mappings
);
List<PropertyData> elements = new ArrayList<PropertyData>();
int deep = classesToProcess.size();
@@ -703,7 +703,7 @@
String explicitAccessType = null;
if ( inheritanceState.hasParents ) {
InheritanceState superEntityState =
- InheritanceState.getSuperEntityInheritanceState( clazzToProcess, inheritanceStatePerClass );
+ InheritanceState.getSuperEntityInheritanceState( clazzToProcess, inheritanceStatePerClass, mappings.getReflectionManager() );
isExplicitPropertyAnnotated = superEntityState != null ? superEntityState.isPropertyAnnotated : null;
explicitAccessType = superEntityState != null ? superEntityState.accessType : null;
}
@@ -727,7 +727,8 @@
InheritanceState state = inheritanceStatePerClass.get( clazz );
boolean currentHasIdentifier = addElementsOfAClass( elements, propertyHolder, isPropertyAnnotated,
- accessType, clazz );
+ accessType, clazz, mappings
+ );
hasIdentifier = hasIdentifier || currentHasIdentifier;
}
@@ -740,7 +741,8 @@
XClass clazz = classesToProcess.get( index );
InheritanceState state = inheritanceStatePerClass.get( clazz );
boolean currentHasIdentifier = addElementsOfAClass( elements, propertyHolder, isPropertyAnnotated,
- accessType, clazz );
+ accessType, clazz, mappings
+ );
hasIdentifier = hasIdentifier || currentHasIdentifier;
}
}
@@ -754,7 +756,7 @@
private static List<XClass> orderClassesToBeProcessed(
XClass annotatedClass, Map<XClass, InheritanceState> inheritanceStatePerClass,
- InheritanceState inheritanceState
+ InheritanceState inheritanceState, ExtendedMappings mappings
) {
//ordered to allow proper messages on properties subclassing
List<XClass> classesToProcess = new ArrayList<XClass>();
@@ -767,7 +769,7 @@
superClass = superClass.getSuperclass();
superclassState = inheritanceStatePerClass.get( superClass );
}
- while ( !ReflectionManager.INSTANCE.equals( superClass, Object.class ) && superclassState == null );
+ while ( !mappings.getReflectionManager().equals( superClass, Object.class ) && superclassState == null );
currentClassInHierarchy = superClass;
}
@@ -846,7 +848,7 @@
*/
private static boolean addElementsOfAClass(
List<PropertyData> elements, PropertyHolder propertyHolder, boolean isPropertyAnnotated,
- String propertyAccessor, final XClass annotatedClass
+ String propertyAccessor, final XClass annotatedClass, ExtendedMappings mappings
) {
boolean hasIdentifier = false;
AccessType access = annotatedClass.getAnnotation( AccessType.class );
@@ -871,9 +873,9 @@
log.debug( "Processing " + propertyHolder.getEntityName() + " " + accessType + " annotation" );
List<XProperty> properties = annotatedClass.getDeclaredProperties(accessType);
for ( XProperty p : properties ) {
- if( !p.isTypeResolved() && !hasExplicitTargetEntity( p ) && !mustBeSkipped( p ) )
+ if( !p.isTypeResolved() && !hasExplicitTargetEntity( p ) && !mustBeSkipped( p, mappings ) )
throw new IllegalStateException( "Property " + p + " has an unbound type and no explicit target entity.");
- final boolean currentHasIdentifier = addProperty( p, elements, localPropertyAccessor );
+ final boolean currentHasIdentifier = addProperty( p, elements, localPropertyAccessor, mappings );
hasIdentifier = hasIdentifier || currentHasIdentifier;
}
return hasIdentifier;
@@ -892,12 +894,12 @@
}
private static boolean addProperty(
- XProperty property, List<PropertyData> annElts,
- String propertyAccessor
+ XProperty property, List<PropertyData> annElts,
+ String propertyAccessor, ExtendedMappings mappings
) {
boolean hasIdentifier = false;
PropertyData propertyAnnotatedElement = new PropertyInferredData( property, propertyAccessor);
- if ( ! mustBeSkipped( propertyAnnotatedElement.getProperty() ) ) {
+ if ( ! mustBeSkipped( propertyAnnotatedElement.getProperty(), mappings ) ) {
/*
* put element annotated by @Id in front
* since it has to be parsed before any assoctation by Hibernate
@@ -915,9 +917,9 @@
return hasIdentifier;
}
- private static boolean mustBeSkipped(XProperty property) {
+ private static boolean mustBeSkipped(XProperty property, ExtendedMappings mappings) {
return property.isAnnotationPresent( Transient.class )
- || ReflectionManager.INSTANCE.equals( property.getType(), InterceptFieldCallback.class );
+ || mappings.getReflectionManager().equals( property.getType(), InterceptFieldCallback.class );
}
/**
@@ -1138,7 +1140,7 @@
getFetchMode( ann.fetch() ),
ignoreNotFound, onDeleteCascade, inferredData.getPropertyName(),
inferredData.getClassOrElementName(),
- ReflectionManager.INSTANCE.toXClass( ann.targetEntity() ),
+ mappings.getReflectionManager().toXClass( ann.targetEntity() ),
inferredData.getDefaultAccess(),
propertyHolder,
false, isIdentifierMapper, mappings
@@ -1161,7 +1163,7 @@
getFetchMode( ann.fetch() ),
ignoreNotFound, onDeleteCascade, inferredData.getPropertyName(),
inferredData.getClassOrElementName(),
- ReflectionManager.INSTANCE.toXClass( ann.targetEntity() ),
+ mappings.getReflectionManager().toXClass( ann.targetEntity() ),
inferredData.getDefaultAccess(),
propertyHolder,
ann.mappedBy(), trueOneToOne, isIdentifierMapper, mappings
@@ -1265,7 +1267,7 @@
}
collectionBinder.setFkJoinColumns( joinColumns );
mappedBy = oneToManyAnn.mappedBy();
- collectionBinder.setTargetEntity( ReflectionManager.INSTANCE.toXClass( oneToManyAnn.targetEntity() ) );
+ collectionBinder.setTargetEntity( mappings.getReflectionManager().toXClass( oneToManyAnn.targetEntity() ) );
collectionBinder.setFetchType( oneToManyAnn.fetch() );
collectionBinder.setCascadeStrategy( getCascadeStrategy( oneToManyAnn.cascade(), hibernateCascade ) );
collectionBinder.setOneToMany( true );
@@ -1278,14 +1280,14 @@
}
collectionBinder.setFkJoinColumns( joinColumns );
mappedBy = "";
- collectionBinder.setTargetEntity( ReflectionManager.INSTANCE.toXClass( collectionOfElementsAnn.targetElement() ) );
+ collectionBinder.setTargetEntity( mappings.getReflectionManager().toXClass( collectionOfElementsAnn.targetElement() ) );
collectionBinder.setFetchType( collectionOfElementsAnn.fetch() );
//collectionBinder.setCascadeStrategy( getCascadeStrategy( embeddedCollectionAnn.cascade(), hibernateCascade ) );
collectionBinder.setOneToMany( true );
}
else if ( manyToManyAnn != null ) {
mappedBy = manyToManyAnn.mappedBy();
- collectionBinder.setTargetEntity( ReflectionManager.INSTANCE.toXClass( manyToManyAnn.targetEntity() ) );
+ collectionBinder.setTargetEntity( mappings.getReflectionManager().toXClass( manyToManyAnn.targetEntity() ) );
collectionBinder.setFetchType( manyToManyAnn.fetch() );
collectionBinder.setCascadeStrategy( getCascadeStrategy( manyToManyAnn.cascade(), hibernateCascade ) );
collectionBinder.setOneToMany( false );
@@ -1454,7 +1456,7 @@
log.debug( "Binding component with path: " + subpath );
PropertyHolder subHolder = PropertyHolderBuilder.buildPropertyHolder(
comp, subpath,
- inferredData, propertyHolder
+ inferredData, propertyHolder, mappings
);
List<PropertyData> classElements = new ArrayList<PropertyData>();
XClass returnedClassOrElement = inferredData.getClassOrElement();
@@ -1462,7 +1464,7 @@
classElements,
subHolder,
propertyAnnotated,
- propertyAccessor, returnedClassOrElement
+ propertyAccessor, returnedClassOrElement, mappings
);
//add elements of the embeddable superclass
XClass superClass = inferredData.getPropertyClass().getSuperclass();
@@ -1472,7 +1474,7 @@
classElements,
subHolder,
entityBinder.isPropertyAnnotated( superClass ),
- propertyAccessor, superClass
+ propertyAccessor, superClass, mappings
);
superClass = superClass.getSuperclass();
}
@@ -1596,7 +1598,7 @@
) {
//All FK columns should be in the same table
org.hibernate.mapping.ManyToOne value = new org.hibernate.mapping.ManyToOne( columns[0].getTable() );
- if ( isDefault( targetEntity ) ) {
+ if ( isDefault( targetEntity, mappings ) ) {
value.setReferencedEntityName( returnedClassName );
}
else {
@@ -1684,7 +1686,7 @@
propertyHolder.getTable(), propertyHolder.getPersistentClass()
);
value.setPropertyName( propertyName );
- if ( isDefault( targetEntity ) ) {
+ if ( isDefault( targetEntity, mappings ) ) {
value.setReferencedEntityName( returnedClassName );
}
else {
@@ -1868,22 +1870,28 @@
return ANNOTATION_STRING_DEFAULT.equals( annotationString );
}
- public static boolean isDefault(XClass clazz) {
- return ReflectionManager.INSTANCE.equals( clazz, void.class );
+ public static boolean isDefault(XClass clazz, ExtendedMappings mappings) {
+ return mappings.getReflectionManager().equals( clazz, void.class );
}
- public static Map<XClass, InheritanceState> buildInheritanceStates(List<XClass> orderedClasses) {
+ public static Map<XClass, InheritanceState> buildInheritanceStates(
+ List<XClass> orderedClasses, ReflectionManager reflectionManager
+ ) {
Map<XClass, InheritanceState> inheritanceStatePerClass = new HashMap<XClass, InheritanceState>(
orderedClasses.size()
);
for ( XClass clazz : orderedClasses ) {
- InheritanceState superclassState = InheritanceState.getSuperclassInheritanceState( clazz, inheritanceStatePerClass );
+ InheritanceState superclassState = InheritanceState.getSuperclassInheritanceState( clazz, inheritanceStatePerClass,
+ reflectionManager
+ );
InheritanceState state = new InheritanceState(clazz);
if ( superclassState != null ) {
//the classes are ordered thus preventing an NPE
//FIXME if an entity has subclasses annotated @MappedSperclass wo sub @Entity this is wrong
superclassState.hasSons = true;
- InheritanceState superEntityState = InheritanceState.getSuperEntityInheritanceState( clazz, inheritanceStatePerClass );
+ InheritanceState superEntityState = InheritanceState.getSuperEntityInheritanceState( clazz, inheritanceStatePerClass,
+ reflectionManager
+ );
state.hasParents = superEntityState != null;
final boolean nonDefault = state.type != null && ! InheritanceType.SINGLE_TABLE.equals( state.type );
if ( superclassState.type != null ) {
Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationConfiguration.java
===================================================================
--- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationConfiguration.java 2006-04-25 20:56:10 UTC (rev 9792)
+++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationConfiguration.java 2006-04-26 06:20:18 UTC (rev 9793)
@@ -2,7 +2,10 @@
package org.hibernate.cfg;
import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
@@ -12,29 +15,34 @@
import java.util.Properties;
import java.util.Set;
import java.util.StringTokenizer;
-import java.util.Collection;
+import javax.persistence.Entity;
import javax.persistence.MappedSuperclass;
-import javax.persistence.Entity;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.dom4j.Attribute;
import org.dom4j.Document;
+import org.dom4j.DocumentException;
import org.dom4j.Element;
+import org.dom4j.io.SAXReader;
import org.hibernate.AnnotationException;
import org.hibernate.MappingException;
import org.hibernate.cfg.annotations.Version;
-import org.hibernate.validator.ClassValidator;
import org.hibernate.mapping.Column;
import org.hibernate.mapping.Join;
+import org.hibernate.mapping.PersistentClass;
import org.hibernate.mapping.Table;
import org.hibernate.mapping.UniqueKey;
-import org.hibernate.mapping.PersistentClass;
import org.hibernate.reflection.ReflectionManager;
import org.hibernate.reflection.XClass;
+import org.hibernate.reflection.java.JavaXFactory;
import org.hibernate.util.JoinedIterator;
import org.hibernate.util.ReflectHelper;
import org.hibernate.util.StringHelper;
+import org.hibernate.util.XMLHelper;
+import org.hibernate.validator.ClassValidator;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
/**
* Add JSR 175 configuration capability.
@@ -64,6 +72,8 @@
private List<Document> hbmDocuments; //user ordering matters, hence the list
private String precedence = null;
private boolean inSecondPass = false;
+ protected XMLHelper xmlHelper;
+ private ReflectionManager reflectionManager;
public AnnotationConfiguration() {
super();
@@ -79,7 +89,7 @@
//for each class, copy all the relevent hierarchy
for (XClass clazz : original) {
XClass superClass = clazz.getSuperclass();
- while ( ! ReflectionManager.INSTANCE.equals( superClass, Object.class ) && ! copy.contains( superClass ) ) {
+ while ( ! reflectionManager.equals( superClass, Object.class ) && ! copy.contains( superClass ) ) {
if (superClass.isAnnotationPresent( Entity.class )
|| superClass.isAnnotationPresent( MappedSuperclass.class) ) {
copy.add( superClass );
@@ -96,8 +106,8 @@
return newList;
}
- private static void orderHierarchy(List<XClass> copy, List<XClass> newList, List<XClass> original, XClass clazz) {
- if ( ReflectionManager.INSTANCE.equals( clazz, Object.class ) ) return;
+ private void orderHierarchy(List<XClass> copy, List<XClass> newList, List<XClass> original, XClass clazz) {
+ if ( reflectionManager.equals( clazz, Object.class ) ) return;
//process superclass first
orderHierarchy( copy, newList, original, clazz.getSuperclass() );
if ( original.contains( clazz ) ) {
@@ -115,11 +125,8 @@
* @return the configuration object
*/
public AnnotationConfiguration addAnnotatedClass(Class persistentClass) throws MappingException {
- XClass persistentXClass = ReflectionManager.INSTANCE.toXClass( persistentClass );
+ XClass persistentXClass = reflectionManager.toXClass( persistentClass );
try {
- if ( persistentXClass.isAnnotationPresent( Entity.class ) ) {
- annotatedClassEntities.put( persistentXClass.getName(), persistentXClass );
- }
annotatedClasses.add( persistentXClass );
return this;
}
@@ -169,7 +176,8 @@
generatorTables,
tableUniqueConstraints,
mappedByResolver,
- propertyRefResolver
+ propertyRefResolver,
+ reflectionManager
);
}
@@ -203,11 +211,19 @@
hbmDocuments = new ArrayList<Document>();
namingStrategy = EJB3NamingStrategy.INSTANCE;
setEntityResolver( new EJB3DTDEntityResolver() );
+ reflectionManager = new JavaXFactory();
+ xmlHelper = new XMLHelper();
}
@Override
protected void secondPassCompile() throws MappingException {
log.debug( "Execute first pass mapping processing" );
+ //build annotatedClassEntities
+ for( XClass clazz : annotatedClasses) {
+ if ( clazz.isAnnotationPresent( Entity.class ) ) {
+ annotatedClassEntities.put( clazz.getName(), clazz );
+ }
+ }
if ( precedence == null ) precedence = getProperties().getProperty( ARTEFACT );
if ( precedence == null ) precedence = DEFAULT_PRECEDENCE;
StringTokenizer precedences = new StringTokenizer( precedence, ",; ", false );
@@ -300,7 +316,7 @@
//bind classes in the correct order calculating some inheritance state
List<XClass> orderedClasses = orderAndFillHierarchy( annotatedClasses );
Map<XClass, InheritanceState> inheritanceStatePerClass = AnnotationBinder.buildInheritanceStates(
- orderedClasses
+ orderedClasses, reflectionManager
);
ExtendedMappings mappings = createExtendedMappings();
for ( XClass clazz : orderedClasses ) {
@@ -418,22 +434,28 @@
@Override
protected void add(org.dom4j.Document doc) throws MappingException {
+ boolean ejb3Xml = "entity-mappings".equals( doc.getRootElement().getName() );
if (inSecondPass) {
//if in second pass bypass the queueing, getExtendedQueue reuse this method
- super.add(doc);
+ if (!ejb3Xml) super.add(doc);
}
else {
- final Element hmNode = doc.getRootElement();
- Attribute packNode = hmNode.attribute( "package" );
- String defaultPackage = packNode != null
- ? packNode.getValue()
- : "";
- Set<String> entityNames = new HashSet<String>();
- findClassNames( defaultPackage, hmNode, entityNames );
- for ( String entity : entityNames ) {
- hbmEntities.put( entity, doc );
+ if (! ejb3Xml) {
+ final Element hmNode = doc.getRootElement();
+ Attribute packNode = hmNode.attribute( "package" );
+ String defaultPackage = packNode != null
+ ? packNode.getValue()
+ : "";
+ Set<String> entityNames = new HashSet<String>();
+ findClassNames( defaultPackage, hmNode, entityNames );
+ for ( String entity : entityNames ) {
+ hbmEntities.put( entity, doc );
+ }
+ hbmDocuments.add( doc );
}
- hbmDocuments.add( doc );
+ else {
+ ( (JavaXFactory) reflectionManager ).getXMLContext().addDocument( doc );
+ }
}
}
@@ -488,4 +510,37 @@
public boolean isClass;
public boolean cacheLazy;
}
+
+ @Override
+ public Configuration addInputStream(InputStream xmlInputStream) throws MappingException {
+ try {
+ List errors = new ArrayList();
+ SAXReader saxReader = xmlHelper.createSAXReader( "XML InputStream", errors, getEntityResolver() );
+ try {
+ saxReader.setFeature( "http://apache.org/xml/features/validation/schema", true );
+ }
+ catch (SAXException e) {
+ saxReader.setValidation( false );
+ }
+ org.dom4j.Document doc = saxReader
+ .read( new InputSource( xmlInputStream ) );
+
+ if ( errors.size() != 0 ) {
+ throw new MappingException( "invalid mapping", (Throwable) errors.get( 0 ) );
+ }
+ add( doc );
+ return this;
+ }
+ catch (DocumentException e) {
+ throw new MappingException( "Could not parse mapping document in input stream", e );
+ }
+ finally {
+ try {
+ xmlInputStream.close();
+ }
+ catch (IOException ioe) {
+ log.warn( "Could not close input stream", ioe );
+ }
+ }
+ }
}
Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/ClassPropertyHolder.java
===================================================================
--- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/ClassPropertyHolder.java 2006-04-25 20:56:10 UTC (rev 9792)
+++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/ClassPropertyHolder.java 2006-04-26 06:20:18 UTC (rev 9793)
@@ -21,9 +21,9 @@
private transient Map<String, Join> joinsPerRealTableName;
public ClassPropertyHolder(
- PersistentClass persistentClass, XClass clazzToProcess, Map<String, Join> joins
+ PersistentClass persistentClass, XClass clazzToProcess, Map<String, Join> joins, ExtendedMappings mappings
) {
- super(persistentClass.getEntityName(), null, clazzToProcess);
+ super(persistentClass.getEntityName(), null, clazzToProcess, mappings );
this.persistentClass = persistentClass;
this.joins = joins;
}
Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/CollectionPropertyHolder.java
===================================================================
--- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/CollectionPropertyHolder.java 2006-04-25 20:56:10 UTC (rev 9792)
+++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/CollectionPropertyHolder.java 2006-04-26 06:20:18 UTC (rev 9793)
@@ -16,8 +16,11 @@
public class CollectionPropertyHolder extends AbstractPropertyHolder {
Collection collection;
- public CollectionPropertyHolder(Collection collection, String path, XClass clazzToProcess, XProperty property) {
- super( path, null, clazzToProcess );
+ public CollectionPropertyHolder(
+ Collection collection, String path, XClass clazzToProcess, XProperty property,
+ ExtendedMappings mappings
+ ) {
+ super( path, null, clazzToProcess, mappings );
this.collection = collection;
setCurrentProperty( property );
}
Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/ComponentPropertyHolder.java
===================================================================
--- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/ComponentPropertyHolder.java 2006-04-25 20:56:10 UTC (rev 9792)
+++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/ComponentPropertyHolder.java 2006-04-26 06:20:18 UTC (rev 9793)
@@ -45,8 +45,11 @@
addProperty( prop );
}
- public ComponentPropertyHolder(Component component, String path, PropertyData inferredData, PropertyHolder parent) {
- super(path, parent, inferredData.getPropertyClass() );
+ public ComponentPropertyHolder(
+ Component component, String path, PropertyData inferredData, PropertyHolder parent,
+ ExtendedMappings mappings
+ ) {
+ super(path, parent, inferredData.getPropertyClass(), mappings );
setCurrentProperty( inferredData.getProperty() );
this.component = component;
}
Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/Ejb3JoinColumn.java
===================================================================
--- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/Ejb3JoinColumn.java 2006-04-25 20:56:10 UTC (rev 9792)
+++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/Ejb3JoinColumn.java 2006-04-26 06:20:18 UTC (rev 9793)
@@ -231,7 +231,7 @@
*/
public void setPersistentClass(PersistentClass persistentClass, Map<String, Join> joins) {
//FIXME shouldn't we deduce the classname from the persistentclasS?
- this.propertyHolder = PropertyHolderBuilder.buildPropertyHolder( null, persistentClass, joins );
+ this.propertyHolder = PropertyHolderBuilder.buildPropertyHolder( null, persistentClass, joins, getMappings() );
}
public static void checkIfJoinColumn(Object columns, PropertyHolder holder, PropertyData property) {
Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/ExtendedMappings.java
===================================================================
--- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/ExtendedMappings.java 2006-04-25 20:56:10 UTC (rev 9792)
+++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/ExtendedMappings.java 2006-04-26 06:20:18 UTC (rev 9793)
@@ -17,6 +17,7 @@
import org.hibernate.mapping.PersistentClass;
import org.hibernate.mapping.Table;
import org.hibernate.reflection.XClass;
+import org.hibernate.reflection.ReflectionManager;
/**
* Allow annotation related mappings
@@ -36,6 +37,7 @@
private final Map<Table, List<String[]>> tableUniqueConstraints;
private final Map<String, String> mappedByResolver;
private final Map<String, String> propertyRefResolver;
+ private final ReflectionManager reflectionManager;
ExtendedMappings(
Map classes, Map collections, Map tables, Map queries, Map sqlqueries, Map sqlResultSetMappings,
@@ -48,7 +50,8 @@
Map<String, Properties> generatorTables,
Map<Table, List<String[]>> tableUniqueConstraints,
Map<String, String> mappedByResolver,
- Map<String, String> propertyRefResolver
+ Map<String, String> propertyRefResolver,
+ ReflectionManager reflectionManager
) {
super(
classes,
@@ -75,6 +78,7 @@
this.tableUniqueConstraints = tableUniqueConstraints;
this.mappedByResolver = mappedByResolver;
this.propertyRefResolver = propertyRefResolver;
+ this.reflectionManager = reflectionManager;
}
public void addGenerator(IdGenerator generator) throws MappingException {
@@ -194,4 +198,8 @@
public void addPropertyReference(String referencedClass, String propertyName) {
super.addPropertyReference( referencedClass, propertyName );
}
+
+ public ReflectionManager getReflectionManager() {
+ return reflectionManager;
+ }
}
\ No newline at end of file
Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/InheritanceState.java
===================================================================
--- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/InheritanceState.java 2006-04-25 20:56:10 UTC (rev 9792)
+++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/InheritanceState.java 2006-04-26 06:20:18 UTC (rev 9793)
@@ -2,13 +2,13 @@
package org.hibernate.cfg;
import java.util.Map;
-import javax.persistence.MappedSuperclass;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
+import javax.persistence.MappedSuperclass;
-import org.hibernate.reflection.ReflectionManager;
import org.hibernate.reflection.XAnnotatedElement;
import org.hibernate.reflection.XClass;
+import org.hibernate.reflection.ReflectionManager;
/**
* Some extra data to the inheritance position of a class
@@ -56,23 +56,29 @@
return hasParents && InheritanceType.TABLE_PER_CLASS.equals( type );
}
- public static InheritanceState getSuperEntityInheritanceState(XClass clazz, Map<XClass, InheritanceState> states) {
+ public static InheritanceState getSuperEntityInheritanceState(
+ XClass clazz, Map<XClass, InheritanceState> states,
+ ReflectionManager reflectionManager
+ ) {
XClass superclass = clazz;
do {
superclass = superclass.getSuperclass();
InheritanceState currentState = states.get( superclass );
if (currentState != null && ! currentState.isEmbeddableSuperclass) return currentState;
- } while ( ! ReflectionManager.INSTANCE.equals( superclass, Object.class ) );
+ } while ( ! reflectionManager.equals( superclass, Object.class ) );
return null;
}
- public static InheritanceState getSuperclassInheritanceState(XClass clazz, Map<XClass, InheritanceState> states) {
+ public static InheritanceState getSuperclassInheritanceState(
+ XClass clazz, Map<XClass, InheritanceState> states,
+ ReflectionManager reflectionManager
+ ) {
XClass superclass = clazz;
do {
superclass = superclass.getSuperclass();
InheritanceState currentState = states.get( superclass );
if (currentState != null) return currentState;
- } while ( ! ReflectionManager.INSTANCE.equals( superclass, Object.class ) );
+ } while ( ! reflectionManager.equals( superclass, Object.class ) );
return null;
}
}
Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/PropertyHolderBuilder.java
===================================================================
--- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/PropertyHolderBuilder.java 2006-04-25 20:56:10 UTC (rev 9792)
+++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/PropertyHolderBuilder.java 2006-04-26 06:20:18 UTC (rev 9793)
@@ -22,9 +22,9 @@
public static PropertyHolder buildPropertyHolder(
XClass clazzToProcess,
PersistentClass persistentClass,
- Map<String, Join> joins
+ Map<String, Join> joins, ExtendedMappings mappings
) {
- return (PropertyHolder) new ClassPropertyHolder( persistentClass, clazzToProcess, joins );
+ return (PropertyHolder) new ClassPropertyHolder( persistentClass, clazzToProcess, joins, mappings );
}
/**
@@ -32,23 +32,31 @@
*
* @param component component to wrap
* @param path component path
+ * @param mappings
* @return PropertyHolder
*/
public static PropertyHolder buildPropertyHolder(
- Component component, String path, PropertyData inferredData, PropertyHolder parent
+ Component component, String path, PropertyData inferredData, PropertyHolder parent,
+ ExtendedMappings mappings
) {
- return (PropertyHolder) new ComponentPropertyHolder( component, path, inferredData, parent );
+ return (PropertyHolder) new ComponentPropertyHolder( component, path, inferredData, parent, mappings );
}
/**
* buid a property holder on top of a collection
*/
- public static PropertyHolder buildPropertyHolder(Collection collection, String path, XClass clazzToProcess, XProperty property) {
- return new CollectionPropertyHolder( collection, path, clazzToProcess, property);
+ public static PropertyHolder buildPropertyHolder(
+ Collection collection, String path, XClass clazzToProcess, XProperty property,
+ ExtendedMappings mappings
+ ) {
+ return new CollectionPropertyHolder( collection, path, clazzToProcess, property, mappings );
}
- public static PropertyHolder buildPropertyHolder(PersistentClass persistentClass, Map<String, Join> joins) {
- return buildPropertyHolder( null, persistentClass, joins );
+ public static PropertyHolder buildPropertyHolder(
+ PersistentClass persistentClass, Map<String, Join> joins,
+ ExtendedMappings mappings
+ ) {
+ return buildPropertyHolder( null, persistentClass, joins, mappings );
}
}
Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/CollectionBinder.java
===================================================================
--- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/CollectionBinder.java 2006-04-25 20:56:10 UTC (rev 9792)
+++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/CollectionBinder.java 2006-04-26 06:20:18 UTC (rev 9793)
@@ -7,11 +7,11 @@
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
+import javax.persistence.AttributeOverride;
+import javax.persistence.AttributeOverrides;
import javax.persistence.Embeddable;
import javax.persistence.FetchType;
import javax.persistence.MapKey;
-import javax.persistence.AttributeOverride;
-import javax.persistence.AttributeOverrides;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -22,11 +22,11 @@
import org.hibernate.annotations.AccessType;
import org.hibernate.annotations.BatchSize;
import org.hibernate.annotations.Cache;
+import org.hibernate.annotations.CollectionOfElements;
import org.hibernate.annotations.OrderBy;
import org.hibernate.annotations.Sort;
import org.hibernate.annotations.SortType;
import org.hibernate.annotations.Where;
-import org.hibernate.annotations.CollectionOfElements;
import org.hibernate.cfg.AnnotatedClassType;
import org.hibernate.cfg.AnnotationBinder;
import org.hibernate.cfg.BinderHelper;
@@ -52,7 +52,6 @@
import org.hibernate.mapping.Property;
import org.hibernate.mapping.SimpleValue;
import org.hibernate.mapping.Table;
-import org.hibernate.reflection.ReflectionManager;
import org.hibernate.reflection.XAnnotatedElement;
import org.hibernate.reflection.XClass;
import org.hibernate.reflection.XProperty;
@@ -364,7 +363,7 @@
}
private XClass getCollectionType() {
- if ( AnnotationBinder.isDefault( targetEntity ) ) {
+ if ( AnnotationBinder.isDefault( targetEntity, mappings ) ) {
if ( collectionType != null ) {
return collectionType;
}
@@ -789,7 +788,7 @@
}
else {
try {
- elementClass = ReflectionManager.INSTANCE.classForName( collType, CollectionBinder.class );
+ elementClass = mappings.getReflectionManager().classForName( collType, CollectionBinder.class );
}
catch (ClassNotFoundException e) {
throw new AnnotationException( "Unable to find class: " + collType, e );
@@ -800,7 +799,7 @@
collValue,
collValue.getRole(),
elementClass,
- property
+ property, mappings
);
//force in case of attribute override
boolean attributeOverride = property.isAnnotationPresent(AttributeOverride.class)
Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/EntityBinder.java
===================================================================
--- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/EntityBinder.java 2006-04-25 20:56:10 UTC (rev 9792)
+++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/EntityBinder.java 2006-04-26 06:20:18 UTC (rev 9793)
@@ -42,7 +42,6 @@
import org.hibernate.mapping.Table;
import org.hibernate.mapping.TableOwner;
import org.hibernate.mapping.Value;
-import org.hibernate.reflection.ReflectionManager;
import org.hibernate.reflection.XAnnotatedElement;
import org.hibernate.reflection.XClass;
import org.hibernate.util.ReflectHelper;
@@ -269,11 +268,11 @@
proxyClass = null;
}
else {
- if ( AnnotationBinder.isDefault( ReflectionManager.INSTANCE.toXClass( proxy.proxyClass() ) ) ) {
+ if ( AnnotationBinder.isDefault( mappings.getReflectionManager().toXClass( proxy.proxyClass() ), mappings ) ) {
proxyClass = annotatedClass;
}
else {
- proxyClass = ReflectionManager.INSTANCE.toXClass( proxy.proxyClass() );
+ proxyClass = mappings.getReflectionManager().toXClass( proxy.proxyClass() );
}
}
}
Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/ListBinder.java
===================================================================
--- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/ListBinder.java 2006-04-25 20:56:10 UTC (rev 9792)
+++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/ListBinder.java 2006-04-26 06:20:18 UTC (rev 9793)
@@ -78,7 +78,7 @@
this.collection,
IndexedCollection.DEFAULT_INDEX_COLUMN_NAME,
(XClass) null,
- (XProperty) null
+ (XProperty) null, mappings
);
List list = (List) this.collection;
if ( ! list.isOneToMany() ) indexColumn.forceNotNull();
Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/MapBinder.java
===================================================================
--- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/MapBinder.java 2006-04-25 20:56:10 UTC (rev 9792)
+++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/MapBinder.java 2006-04-26 06:20:18 UTC (rev 9793)
@@ -1,10 +1,9 @@
//$Id$
package org.hibernate.cfg.annotations;
+import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
-import java.util.HashMap;
-
import javax.persistence.AttributeOverride;
import javax.persistence.AttributeOverrides;
import javax.persistence.Embeddable;
@@ -14,32 +13,31 @@
import org.hibernate.FetchMode;
import org.hibernate.MappingException;
import org.hibernate.annotations.AccessType;
+import org.hibernate.cfg.AnnotatedClassType;
+import org.hibernate.cfg.AnnotationBinder;
import org.hibernate.cfg.BinderHelper;
import org.hibernate.cfg.CollectionSecondPass;
import org.hibernate.cfg.Ejb3Column;
import org.hibernate.cfg.Ejb3JoinColumn;
import org.hibernate.cfg.ExtendedMappings;
-import org.hibernate.cfg.SecondPass;
-import org.hibernate.cfg.AnnotatedClassType;
+import org.hibernate.cfg.PropertyData;
import org.hibernate.cfg.PropertyHolder;
import org.hibernate.cfg.PropertyHolderBuilder;
-import org.hibernate.cfg.PropertyData;
import org.hibernate.cfg.PropertyPreloadedData;
-import org.hibernate.cfg.AnnotationBinder;
+import org.hibernate.cfg.SecondPass;
import org.hibernate.mapping.Collection;
import org.hibernate.mapping.Column;
import org.hibernate.mapping.Component;
import org.hibernate.mapping.Formula;
+import org.hibernate.mapping.Join;
+import org.hibernate.mapping.ManyToOne;
import org.hibernate.mapping.PersistentClass;
import org.hibernate.mapping.Property;
import org.hibernate.mapping.SimpleValue;
import org.hibernate.mapping.Value;
-import org.hibernate.mapping.ManyToOne;
-import org.hibernate.mapping.Join;
-import org.hibernate.reflection.XProperty;
-import org.hibernate.reflection.XClass;
-import org.hibernate.reflection.ReflectionManager;
import org.hibernate.reflection.XAnnotatedElement;
+import org.hibernate.reflection.XClass;
+import org.hibernate.reflection.XProperty;
/**
* Implementation to bind a Map
@@ -124,7 +122,7 @@
}
else {
try {
- elementClass = ReflectionManager.INSTANCE.classForName( mapKeyType, MapBinder.class );
+ elementClass = mappings.getReflectionManager().classForName( mapKeyType, MapBinder.class );
}
catch (ClassNotFoundException e) {
throw new AnnotationException( "Unable to find class: " + mapKeyType, e );
@@ -135,7 +133,7 @@
mapValue,
mapValue.getRole(),
elementClass,
- property
+ property, mappings
);
//force in case of attribute override
boolean attributeOverride = property.isAnnotationPresent( AttributeOverride.class)
Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/PropertyBinder.java
===================================================================
--- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/PropertyBinder.java 2006-04-25 20:56:10 UTC (rev 9792)
+++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/PropertyBinder.java 2006-04-26 06:20:18 UTC (rev 9793)
@@ -4,7 +4,7 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.cfg.Ejb3Column;
-import org.hibernate.cfg.Mappings;
+import org.hibernate.cfg.ExtendedMappings;
import org.hibernate.cfg.PropertyHolder;
import org.hibernate.mapping.Property;
import org.hibernate.mapping.SimpleValue;
@@ -23,7 +23,7 @@
private String propertyAccessorName;
private Ejb3Column[] columns;
private PropertyHolder holder;
- private Mappings mappings;
+ private ExtendedMappings mappings;
private Value value;
private boolean insertable = true;
private boolean updatable = true;
@@ -75,7 +75,7 @@
this.cascade = cascadeStrategy;
}
- public void setMappings(Mappings mappings) {
+ public void setMappings(ExtendedMappings mappings) {
this.mappings = mappings;
}
@@ -94,6 +94,7 @@
}
String containerClassName = holder == null ? null : holder.getClassName();
SimpleValueBinder value = new SimpleValueBinder();
+ value.setMappings( mappings );
value.setPropertyName( name );
value.setReturnedClassName( returnedClassName );
value.setColumns( columns );
Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/SimpleValueBinder.java
===================================================================
--- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/SimpleValueBinder.java 2006-04-25 20:56:10 UTC (rev 9792)
+++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/SimpleValueBinder.java 2006-04-26 06:20:18 UTC (rev 9793)
@@ -3,28 +3,25 @@
import java.io.Serializable;
import java.sql.Types;
-import java.util.Properties;
-import java.util.Date;
import java.util.Calendar;
-
+import java.util.Date;
+import java.util.Properties;
import javax.persistence.Enumerated;
import javax.persistence.Lob;
import javax.persistence.Temporal;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.hibernate.AssertionFailure;
import org.hibernate.AnnotationException;
-import org.hibernate.util.StringHelper;
+import org.hibernate.AssertionFailure;
import org.hibernate.annotations.Parameter;
import org.hibernate.annotations.Type;
import org.hibernate.cfg.AnnotationBinder;
import org.hibernate.cfg.Ejb3Column;
-import org.hibernate.cfg.Mappings;
+import org.hibernate.cfg.ExtendedMappings;
import org.hibernate.cfg.NotYetImplementedException;
import org.hibernate.mapping.SimpleValue;
import org.hibernate.mapping.Table;
-import org.hibernate.reflection.ReflectionManager;
import org.hibernate.reflection.XClass;
import org.hibernate.reflection.XProperty;
import org.hibernate.type.ByteArrayBlobType;
@@ -34,6 +31,7 @@
import org.hibernate.type.PrimitiveCharacterArrayClobType;
import org.hibernate.type.SerializableToBlobType;
import org.hibernate.type.StringClobType;
+import org.hibernate.util.StringHelper;
/**
* @author Emmanuel Bernard
@@ -46,7 +44,7 @@
private String persistentClassName;
private String explicitType = "";
private Properties typeParameters = new Properties();
- private Mappings mappings;
+ private ExtendedMappings mappings;
public void setPropertyName(String propertyName) {
this.propertyName = propertyName;
@@ -80,10 +78,10 @@
if ( property.isAnnotationPresent( Temporal.class ) ) {
Temporal ann = property.getAnnotation( Temporal.class );
boolean isDate;
- if ( ReflectionManager.INSTANCE.equals( property.getType(), Date.class ) ) {
+ if ( mappings.getReflectionManager().equals( property.getType(), Date.class ) ) {
isDate = true;
}
- else if ( ReflectionManager.INSTANCE.equals( property.getType(), Calendar.class ) ) {
+ else if ( mappings.getReflectionManager().equals( property.getType(), Calendar.class ) ) {
isDate = false;
}
else {
@@ -113,27 +111,27 @@
}
else if ( property.isAnnotationPresent( Lob.class ) ) {
- if ( ReflectionManager.INSTANCE.equals( returnedClassOrElement, java.sql.Clob.class ) ) {
+ if ( mappings.getReflectionManager().equals( returnedClassOrElement, java.sql.Clob.class ) ) {
type = "clob";
}
- else if ( ReflectionManager.INSTANCE.equals( returnedClassOrElement, java.sql.Blob.class ) ) {
+ else if ( mappings.getReflectionManager().equals( returnedClassOrElement, java.sql.Blob.class ) ) {
type = "blob";
}
- else if ( ReflectionManager.INSTANCE.equals( returnedClassOrElement, String.class ) ) {
+ else if ( mappings.getReflectionManager().equals( returnedClassOrElement, String.class ) ) {
type = StringClobType.class.getName();
}
- else if ( ReflectionManager.INSTANCE.equals( returnedClassOrElement, Character.class ) && isArray ) {
+ else if ( mappings.getReflectionManager().equals( returnedClassOrElement, Character.class ) && isArray ) {
type = CharacterArrayClobType.class.getName();
}
- else if ( ReflectionManager.INSTANCE.equals( returnedClassOrElement, char.class ) && isArray ) {
+ else if ( mappings.getReflectionManager().equals( returnedClassOrElement, char.class ) && isArray ) {
type = PrimitiveCharacterArrayClobType.class.getName();
- } else if ( ReflectionManager.INSTANCE.equals( returnedClassOrElement, Byte.class ) && isArray ) {
+ } else if ( mappings.getReflectionManager().equals( returnedClassOrElement, Byte.class ) && isArray ) {
type = ByteArrayBlobType.class.getName();
}
- else if ( ReflectionManager.INSTANCE.equals( returnedClassOrElement, byte.class ) && isArray ) {
+ else if ( mappings.getReflectionManager().equals( returnedClassOrElement, byte.class ) && isArray ) {
type = PrimitiveByteArrayBlobType.class.getName();
}
- else if ( ReflectionManager.INSTANCE.toXClass( Serializable.class ).isAssignableFrom( returnedClassOrElement ) ) {
+ else if ( mappings.getReflectionManager().toXClass( Serializable.class ).isAssignableFrom( returnedClassOrElement ) ) {
type = SerializableToBlobType.class.getName();
//typeParameters = new Properties();
typeParameters.setProperty(
@@ -198,7 +196,7 @@
}
}
- public void setMappings(Mappings mappings) {
+ public void setMappings(ExtendedMappings mappings) {
this.mappings = mappings;
}
Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/ReflectionManager.java
===================================================================
--- trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/ReflectionManager.java 2006-04-25 20:56:10 UTC (rev 9792)
+++ trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/ReflectionManager.java 2006-04-26 06:20:18 UTC (rev 9793)
@@ -1,7 +1,5 @@
package org.hibernate.reflection;
-import org.hibernate.reflection.java.JavaXFactory;
-
/**
* The entry point to the reflection layer (a.k.a. the X* layer).
*
@@ -11,7 +9,7 @@
public interface ReflectionManager {
// TODO: turn this Singleton into a plug-in
- public static final JavaXFactory INSTANCE = new JavaXFactory();
+ //public static final JavaXFactory INSTANCE = new JavaXFactory();
public <T> XClass toXClass(Class<T> clazz);
Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/EJB3OverridenAnnotationReader.java
===================================================================
--- trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/EJB3OverridenAnnotationReader.java 2006-04-25 20:56:10 UTC (rev 9792)
+++ trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/EJB3OverridenAnnotationReader.java 2006-04-26 06:20:18 UTC (rev 9793)
@@ -238,7 +238,7 @@
public <T extends Annotation> boolean isAnnotationPresent(Class<T> annotationType) {
initAnnotations();
for ( Annotation annotation : annotations ) {
- if ( annotation.getClass().equals( annotationType ) ) return true;
+ if ( annotation.annotationType().equals( annotationType ) ) return true;
}
return false;
}
@@ -320,6 +320,10 @@
annotationList.add( transientAnn );
}
else {
+ if ( defaults.canUseJavaAnnotations() ) {
+ Annotation annotation = super.getAnnotation( AccessType.class );
+ if (annotation != null) annotationList.add( annotation );
+ }
getId( annotationList, defaults );
getEmbeddedId( annotationList, defaults );
getEmbedded( annotationList, defaults );
@@ -420,7 +424,7 @@
ad.setValue( "targetEntity", clazz);
}
getFetchType( ad, element );
- getCascades( ad, element );
+ getCascades( ad, element, defaults );
getJoinTable( annotationList, element, defaults );
buildJoinColumns( annotationList, element, defaults );
Annotation annotation = getPrimaryKeyJoinColumns( element, defaults );
@@ -450,6 +454,24 @@
if (annotation != null) annotationList.add( annotation );
annotation = super.getAnnotation( OrderBy.class );
if (annotation != null) annotationList.add( annotation );
+ annotation = super.getAnnotation( AttributeOverride.class );
+ if (annotation != null) annotationList.add( annotation );
+ annotation = super.getAnnotation( AttributeOverrides.class );
+ if (annotation != null) annotationList.add( annotation );
+ annotation = super.getAnnotation( AssociationOverride.class );
+ if (annotation != null) annotationList.add( annotation );
+ annotation = super.getAnnotation( AssociationOverrides.class );
+ if (annotation != null) annotationList.add( annotation );
+ annotation = super.getAnnotation( Lob.class );
+ if (annotation != null) annotationList.add(annotation);
+ annotation = super.getAnnotation( Enumerated.class );
+ if (annotation != null) annotationList.add(annotation);
+ annotation = super.getAnnotation( Temporal.class );
+ if (annotation != null) annotationList.add(annotation);
+ annotation = super.getAnnotation( Column.class );
+ if (annotation != null) annotationList.add(annotation);
+ annotation = super.getAnnotation( Columns.class );
+ if (annotation != null) annotationList.add(annotation);
}
}
}
@@ -483,7 +505,7 @@
}
}
- private void getCascades(AnnotationDescriptor ad, Element element) {
+ private void getCascades(AnnotationDescriptor ad, Element element, XMLContext.Default defaults) {
List<Element> elements = element != null ? element.elements( "cascade" ) : new ArrayList<Element>(0);
List<CascadeType> cascades = new ArrayList<CascadeType>();
for (Element subelement : elements) {
@@ -493,6 +515,10 @@
if (subelement.element( "cascade-remove") != null) cascades.add( CascadeType.REMOVE );
if (subelement.element( "cascade-refresh") != null) cascades.add( CascadeType.REFRESH );
}
+ if ( Boolean.TRUE.equals( defaults.getCascadePersist() )
+ && ! cascades.contains( CascadeType.ALL ) && ! cascades.contains( CascadeType.PERSIST ) ) {
+ cascades.add( CascadeType.PERSIST );
+ }
if (cascades.size() > 0) {
ad.setValue( "cascade", cascades.toArray( new CascadeType[ cascades.size() ] ) );
}
@@ -506,8 +532,18 @@
}
}
if ( elementsForProperty.size() == 0 && defaults.canUseJavaAnnotations() ) {
- Embedded annotation = super.getAnnotation( Embedded.class );
- if (annotation != null) annotationList.add( annotation );
+ Annotation annotation = super.getAnnotation( Embedded.class );
+ if (annotation != null) {
+ annotationList.add( annotation );
+ annotation = super.getAnnotation( AttributeOverride.class );
+ if (annotation != null) annotationList.add( annotation );
+ annotation = super.getAnnotation( AttributeOverrides.class );
+ if (annotation != null) annotationList.add( annotation );
+ annotation = super.getAnnotation( AssociationOverride.class );
+ if (annotation != null) annotationList.add( annotation );
+ annotation = super.getAnnotation( AssociationOverrides.class );
+ if (annotation != null) annotationList.add( annotation );
+ }
}
}
@@ -536,10 +572,10 @@
annotationList.add( AnnotationFactory.create( basic ) );
}
}
- if ( elementsForProperty.size() == 0 ) {
+ if ( elementsForProperty.size() == 0 && defaults.canUseJavaAnnotations()) {
//we have nothing, so Java annotations might occurs
- if ( defaults.canUseJavaAnnotations() ) {
- Annotation annotation = super.getAnnotation( Version.class );
+ Annotation annotation = super.getAnnotation( Version.class );
+ if ( annotation != null ) {
if (annotation != null) annotationList.add(annotation);
annotation = super.getAnnotation( Column.class );
if (annotation != null) annotationList.add(annotation);
@@ -565,22 +601,28 @@
annotat...
[truncated message content] |