Hibernate SVN: r15092 - in search/trunk: src/java/org/hibernate/search/bridge and 1 other directories.
by hibernate-commits@lists.jboss.org
Author: navssurtani
Date: 2008-08-18 08:28:57 -0400 (Mon, 18 Aug 2008)
New Revision: 15092
Modified:
search/trunk/doc/reference/en/modules/mapping.xml
search/trunk/src/java/org/hibernate/search/bridge/BridgeFactory.java
search/trunk/src/java/org/hibernate/search/engine/DocumentBuilder.java
Log:
Finished @ProvidedId documentation in mapping.xml and @ProvidedId can now be set on superclass
Modified: search/trunk/doc/reference/en/modules/mapping.xml
===================================================================
--- search/trunk/doc/reference/en/modules/mapping.xml 2008-08-15 21:20:15 UTC (rev 15091)
+++ search/trunk/doc/reference/en/modules/mapping.xml 2008-08-18 12:28:57 UTC (rev 15092)
@@ -1136,4 +1136,35 @@
</section>
</section>
</section>
+
+ <section id="provided-id">
+ <title>Providing your own id</title>
+
+ <para>You can provide your own id for Hibernate Search if you are extending the internals. You will have to generate a unique value so it can be given to Lucene to
+ be indexed. This will have to be given to Hibernate Search when you create an org.hibernate.search.Work object - the document id is required in the constructor.
+ </para>
+
+ <section id="@ProvidedId">
+ <title>The @ProvidedId annotation</title>
+
+ <para>Unlike conventional Hibernate Search API and @DocumentId, this annotation is used on the class and not a field. You also can provide your own bridge implementation when you put in this annotation by calling the bridge() which is on @ProvidedId. Also, if you annotate a class with @ProvidedId, your subclasses will also get the annotation - but it is not done by using the java.lang.annotations.@Inherited. Be sure however, to <emphasis>not</emphasis> use this annotation with @DocumentId as your system will break.
+ </para>
+
+ <programlisting>
+
+ @ProvidedId (bridge = org.my.own.package.MyCustomBridge)
+ @Indexed
+ public class MyClass{
+
+ @Field
+ String MyString;
+
+ ...
+
+ }
+
+
+ </programlisting>
+ </section>
+ </section>
</chapter>
\ No newline at end of file
Modified: search/trunk/src/java/org/hibernate/search/bridge/BridgeFactory.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/bridge/BridgeFactory.java 2008-08-15 21:20:15 UTC (rev 15091)
+++ search/trunk/src/java/org/hibernate/search/bridge/BridgeFactory.java 2008-08-18 12:28:57 UTC (rev 15092)
@@ -293,11 +293,11 @@
}
}
catch (Exception e) {
- throw new HibernateException( "Unable to instantiate FieldBridge for " + ClassBridge.class.getName(), e );
+ throw new HibernateException( "Unable to instantiate FieldBridge for " + org.hibernate.search.annotations.FieldBridge.class.getName(), e );
}
}
}
- if ( bridge == null ) throw new SearchException( "Unable to guess FieldBridge for " + ClassBridge.class.getName() );
+ if ( bridge == null ) throw new SearchException( "Unable to guess FieldBridge for " + org.hibernate.search.annotations.FieldBridge.class.getName() );
return bridge;
}
Modified: search/trunk/src/java/org/hibernate/search/engine/DocumentBuilder.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/engine/DocumentBuilder.java 2008-08-15 21:20:15 UTC (rev 15091)
+++ search/trunk/src/java/org/hibernate/search/engine/DocumentBuilder.java 2008-08-18 12:28:57 UTC (rev 15092)
@@ -67,808 +67,832 @@
* @author Richard Hallier
* @author Hardy Ferentschik
*/
-@SuppressWarnings( "unchecked" )
+@SuppressWarnings("unchecked")
public class DocumentBuilder<T> {
- private static final Logger log = LoggerFactory.getLogger( DocumentBuilder.class );
+ private static final Logger log = LoggerFactory.getLogger(DocumentBuilder.class);
- private final PropertiesMetadata rootPropertiesMetadata = new PropertiesMetadata();
- private final XClass beanClass;
- private final DirectoryProvider[] directoryProviders;
- private final IndexShardingStrategy shardingStrategy;
- private String idKeywordName;
- private XMember idGetter;
- private Float idBoost;
- public static final String CLASS_FIELDNAME = "_hibernate_class";
- private TwoWayFieldBridge idBridge;
- private Set<Class> mappedSubclasses = new HashSet<Class>();
- private ReflectionManager reflectionManager;
- private int level = 0;
- private int maxLevel = Integer.MAX_VALUE;
- private final ScopedAnalyzer analyzer = new ScopedAnalyzer();
- private Similarity similarity;
- private boolean isRoot;
- //if composite id, use of (a, b) in ((1,2), (3,4)) fails on most database
- private boolean safeFromTupleId;
- private boolean idProvided = false;
+ private final PropertiesMetadata rootPropertiesMetadata = new PropertiesMetadata();
+ private final XClass beanClass;
+ private final DirectoryProvider[] directoryProviders;
+ private final IndexShardingStrategy shardingStrategy;
+ private String idKeywordName;
+ private XMember idGetter;
+ private Float idBoost;
+ public static final String CLASS_FIELDNAME = "_hibernate_class";
+ private TwoWayFieldBridge idBridge;
+ private Set<Class> mappedSubclasses = new HashSet<Class>();
+ private ReflectionManager reflectionManager;
+ private int level = 0;
+ private int maxLevel = Integer.MAX_VALUE;
+ private final ScopedAnalyzer analyzer = new ScopedAnalyzer();
+ private Similarity similarity;
+ private boolean isRoot;
+ //if composite id, use of (a, b) in ((1,2), (3,4)) fails on most database
+ private boolean safeFromTupleId;
+ private boolean idProvided = false;
- public boolean isRoot() {
- return isRoot;
- }
+ public boolean isRoot() {
+ return isRoot;
+ }
- public DocumentBuilder(XClass clazz, InitContext context, DirectoryProvider[] directoryProviders,
- IndexShardingStrategy shardingStrategy, ReflectionManager reflectionManager) {
- this.beanClass = clazz;
- this.directoryProviders = directoryProviders;
- this.shardingStrategy = shardingStrategy;
- //FIXME get rid of it when boost is stored?
- this.reflectionManager = reflectionManager;
- this.similarity = context.getDefaultSimilarity();
+ public DocumentBuilder(XClass clazz, InitContext context, DirectoryProvider[] directoryProviders,
+ IndexShardingStrategy shardingStrategy, ReflectionManager reflectionManager) {
+ this.beanClass = clazz;
+ this.directoryProviders = directoryProviders;
+ this.shardingStrategy = shardingStrategy;
+ //FIXME get rid of it when boost is stored?
+ this.reflectionManager = reflectionManager;
+ this.similarity = context.getDefaultSimilarity();
- if ( clazz == null ) throw new AssertionFailure( "Unable to build a DocumentBuilder with a null class" );
- rootPropertiesMetadata.boost = getBoost( clazz );
- rootPropertiesMetadata.analyzer = context.getDefaultAnalyzer();
- Set<XClass> processedClasses = new HashSet<XClass>();
- processedClasses.add( clazz );
- initializeMembers( clazz, rootPropertiesMetadata, true, "", processedClasses, context );
- //processedClasses.remove( clazz ); for the sake of completness
- this.analyzer.setGlobalAnalyzer( rootPropertiesMetadata.analyzer );
- if ( idKeywordName == null ) {
- // if no DocumentId then check if we have a ProvidedId instead
- ProvidedId provided = clazz.getAnnotation( org.hibernate.search.annotations.ProvidedId.class );
- if ( provided == null ) throw new SearchException( "No document id in: " + clazz.getName() );
+ if (clazz == null) throw new AssertionFailure("Unable to build a DocumentBuilder with a null class");
+ rootPropertiesMetadata.boost = getBoost(clazz);
+ rootPropertiesMetadata.analyzer = context.getDefaultAnalyzer();
+ Set<XClass> processedClasses = new HashSet<XClass>();
+ processedClasses.add(clazz);
+ initializeMembers(clazz, rootPropertiesMetadata, true, "", processedClasses, context);
+ //processedClasses.remove( clazz ); for the sake of completness
+ this.analyzer.setGlobalAnalyzer(rootPropertiesMetadata.analyzer);
+ if (idKeywordName == null) {
+ // if no DocumentId then check if we have a ProvidedId instead
+ ProvidedId provided = findProvidedId(clazz);
+ if (provided == null) throw new SearchException("No document id in: " + clazz.getName());
- idBridge = BridgeFactory.extractTwoWayType(provided.bridge());
- idKeywordName = provided.name();
- }
- //if composite id, use of (a, b) in ((1,2)TwoWayString2FieldBridgeAdaptor, (3,4)) fails on most database
- //a TwoWayString2FieldBridgeAdaptor is never a composite id
- safeFromTupleId = TwoWayString2FieldBridgeAdaptor.class.isAssignableFrom( idBridge.getClass() );
- }
+ idBridge = BridgeFactory.extractTwoWayType(provided.bridge());
+ idKeywordName = provided.name();
+ }
+ //if composite id, use of (a, b) in ((1,2)TwoWayString2FieldBridgeAdaptor, (3,4)) fails on most database
+ //a TwoWayString2FieldBridgeAdaptor is never a composite id
+ safeFromTupleId = TwoWayString2FieldBridgeAdaptor.class.isAssignableFrom(idBridge.getClass());
+ }
- private Analyzer getAnalyzer(XAnnotatedElement annotatedElement, InitContext context) {
- org.hibernate.search.annotations.Analyzer analyzerAnn =
- annotatedElement.getAnnotation( org.hibernate.search.annotations.Analyzer.class );
- return getAnalyzer( analyzerAnn, context );
- }
+ private ProvidedId findProvidedId(XClass clazz) {
+ ProvidedId id = clazz.getAnnotation(ProvidedId.class);
+ if (id == null) {
+ if (clazz.getClass().equals(Object.class)) {
+ // no superclass!
+ return null;
+ }
+ else {
+ // look at superclass
+ return findProvidedId(clazz.getSuperclass());
+ }
+ }
+ else {
+ return id;
+ }
+ }
- private Analyzer getAnalyzer(org.hibernate.search.annotations.Analyzer analyzerAnn, InitContext context) {
- Class analyzerClass = analyzerAnn == null ? void.class : analyzerAnn.impl();
- if ( analyzerClass == void.class ) {
- String definition = analyzerAnn == null ? "" : analyzerAnn.definition();
- if ( StringHelper.isEmpty( definition ) ) {
- return null;
- }
- else {
+ private Analyzer getAnalyzer(XAnnotatedElement annotatedElement, InitContext context) {
+ org.hibernate.search.annotations.Analyzer analyzerAnn =
+ annotatedElement.getAnnotation(org.hibernate.search.annotations.Analyzer.class);
+ return getAnalyzer(analyzerAnn, context);
+ }
- return context.buildLazyAnalyzer( definition );
- }
- }
- else {
- try {
- return (Analyzer) analyzerClass.newInstance();
- }
- catch (ClassCastException e) {
- throw new SearchException(
- "Lucene analyzer does not implement " + Analyzer.class.getName() + ": " + analyzerClass.getName(), e
- );
- }
- catch (Exception e) {
- throw new SearchException( "Failed to instantiate lucene analyzer with type " + analyzerClass.getName(), e );
- }
- }
- }
+ private Analyzer getAnalyzer(org.hibernate.search.annotations.Analyzer analyzerAnn, InitContext context) {
+ Class analyzerClass = analyzerAnn == null ? void.class : analyzerAnn.impl();
+ if (analyzerClass == void.class) {
+ String definition = analyzerAnn == null ? "" : analyzerAnn.definition();
+ if (StringHelper.isEmpty(definition)) {
+ return null;
+ }
+ else {
- private void initializeMembers(XClass clazz, PropertiesMetadata propertiesMetadata, boolean isRoot, String prefix,
- Set<XClass> processedClasses, InitContext context) {
- List<XClass> hierarchy = new ArrayList<XClass>();
- for (XClass currClass = clazz; currClass != null; currClass = currClass.getSuperclass()) {
- hierarchy.add( currClass );
- }
- Class similarityClass = null;
- for (int index = hierarchy.size() - 1; index >= 0; index--) {
- XClass currClass = hierarchy.get( index );
- /**
- * Override the default analyzer for the properties if the class hold one
- * That's the reason we go down the hierarchy
- */
- Analyzer analyzer = getAnalyzer( currClass, context );
+ return context.buildLazyAnalyzer(definition);
+ }
+ }
+ else {
+ try {
+ return (Analyzer) analyzerClass.newInstance();
+ }
+ catch (ClassCastException e) {
+ throw new SearchException(
+ "Lucene analyzer does not implement " + Analyzer.class.getName() + ": " + analyzerClass.getName(), e
+ );
+ }
+ catch (Exception e) {
+ throw new SearchException("Failed to instantiate lucene analyzer with type " + analyzerClass.getName(), e);
+ }
+ }
+ }
- if ( analyzer != null ) {
- propertiesMetadata.analyzer = analyzer;
- }
- getAnalyzerDefs( currClass, context );
- // Check for any ClassBridges annotation.
- ClassBridges classBridgesAnn = currClass.getAnnotation( ClassBridges.class );
- if ( classBridgesAnn != null ) {
- ClassBridge[] cbs = classBridgesAnn.value();
- for (ClassBridge cb : cbs) {
- bindClassAnnotation( prefix, propertiesMetadata, cb, context );
- }
- }
+ private void initializeMembers(XClass clazz, PropertiesMetadata propertiesMetadata, boolean isRoot, String prefix,
+ Set<XClass> processedClasses, InitContext context) {
+ List<XClass> hierarchy = new ArrayList<XClass>();
+ for (XClass currClass = clazz; currClass != null; currClass = currClass.getSuperclass()) {
+ hierarchy.add(currClass);
+ }
+ Class similarityClass = null;
+ for (int index = hierarchy.size() - 1; index >= 0; index--) {
+ XClass currClass = hierarchy.get(index);
+ /**
+ * Override the default analyzer for the properties if the class hold one
+ * That's the reason we go down the hierarchy
+ */
+ Analyzer analyzer = getAnalyzer(currClass, context);
- // Check for any ClassBridge style of annotations.
- ClassBridge classBridgeAnn = currClass.getAnnotation( ClassBridge.class );
- if ( classBridgeAnn != null ) {
- bindClassAnnotation( prefix, propertiesMetadata, classBridgeAnn, context );
- }
+ if (analyzer != null) {
+ propertiesMetadata.analyzer = analyzer;
+ }
+ getAnalyzerDefs(currClass, context);
+ // Check for any ClassBridges annotation.
+ ClassBridges classBridgesAnn = currClass.getAnnotation(ClassBridges.class);
+ if (classBridgesAnn != null) {
+ ClassBridge[] cbs = classBridgesAnn.value();
+ for (ClassBridge cb : cbs) {
+ bindClassAnnotation(prefix, propertiesMetadata, cb, context);
+ }
+ }
- //Get similarity
- //TODO: similarity form @IndexedEmbedded are not taken care of. Exception??
- if ( isRoot ) {
- org.hibernate.search.annotations.Similarity similarityAnn = currClass.getAnnotation( org.hibernate.search.annotations.Similarity.class );
- if ( similarityAnn != null ) {
- if ( similarityClass != null ) {
- throw new SearchException( "Multiple Similarities defined in the same class hierarchy: " + beanClass.getName() );
- }
- similarityClass = similarityAnn.impl();
- }
- }
+ // Check for any ClassBridge style of annotations.
+ ClassBridge classBridgeAnn = currClass.getAnnotation(ClassBridge.class);
+ if (classBridgeAnn != null) {
+ bindClassAnnotation(prefix, propertiesMetadata, classBridgeAnn, context);
+ }
- //rejecting non properties (ie regular methods) because the object is loaded from Hibernate,
- // so indexing a non property does not make sense
- List<XProperty> methods = currClass.getDeclaredProperties( XClass.ACCESS_PROPERTY );
- for (XProperty method : methods) {
- initializeMember( method, propertiesMetadata, isRoot, prefix, processedClasses, context );
- }
+ //Get similarity
+ //TODO: similarity form @IndexedEmbedded are not taken care of. Exception??
+ if (isRoot) {
+ org.hibernate.search.annotations.Similarity similarityAnn = currClass.getAnnotation(org.hibernate.search.annotations.Similarity.class);
+ if (similarityAnn != null) {
+ if (similarityClass != null) {
+ throw new SearchException("Multiple Similarities defined in the same class hierarchy: " + beanClass.getName());
+ }
+ similarityClass = similarityAnn.impl();
+ }
+ }
- List<XProperty> fields = currClass.getDeclaredProperties( XClass.ACCESS_FIELD );
- for (XProperty field : fields) {
- initializeMember( field, propertiesMetadata, isRoot, prefix, processedClasses, context );
- }
- }
- if ( isRoot && similarityClass != null ) {
- try {
- similarity = (Similarity) similarityClass.newInstance();
- }
- catch (Exception e) {
- log.error( "Exception attempting to instantiate Similarity '{}' set for {}",
- similarityClass.getName(), beanClass.getName() );
- }
- }
- }
+ //rejecting non properties (ie regular methods) because the object is loaded from Hibernate,
+ // so indexing a non property does not make sense
+ List<XProperty> methods = currClass.getDeclaredProperties(XClass.ACCESS_PROPERTY);
+ for (XProperty method : methods) {
+ initializeMember(method, propertiesMetadata, isRoot, prefix, processedClasses, context);
+ }
- private void getAnalyzerDefs(XAnnotatedElement annotatedElement, InitContext context) {
- AnalyzerDefs defs = annotatedElement.getAnnotation( AnalyzerDefs.class );
- if ( defs != null ) {
- for (AnalyzerDef def : defs.value()) {
- context.addAnalyzerDef( def );
- }
- }
- AnalyzerDef def = annotatedElement.getAnnotation( AnalyzerDef.class );
- context.addAnalyzerDef( def );
- }
+ List<XProperty> fields = currClass.getDeclaredProperties(XClass.ACCESS_FIELD);
+ for (XProperty field : fields) {
+ initializeMember(field, propertiesMetadata, isRoot, prefix, processedClasses, context);
+ }
+ }
+ if (isRoot && similarityClass != null) {
+ try {
+ similarity = (Similarity) similarityClass.newInstance();
+ }
+ catch (Exception e) {
+ log.error("Exception attempting to instantiate Similarity '{}' set for {}",
+ similarityClass.getName(), beanClass.getName());
+ }
+ }
+ }
- public String getIdentifierName() {
- return idGetter.getName();
- }
+ private void getAnalyzerDefs(XAnnotatedElement annotatedElement, InitContext context) {
+ AnalyzerDefs defs = annotatedElement.getAnnotation(AnalyzerDefs.class);
+ if (defs != null) {
+ for (AnalyzerDef def : defs.value()) {
+ context.addAnalyzerDef(def);
+ }
+ }
+ AnalyzerDef def = annotatedElement.getAnnotation(AnalyzerDef.class);
+ context.addAnalyzerDef(def);
+ }
- public Similarity getSimilarity() {
- return similarity;
- }
+ public String getIdentifierName() {
+ return idGetter.getName();
+ }
- private void initializeMember(XProperty member, PropertiesMetadata propertiesMetadata, boolean isRoot,
- String prefix, Set<XClass> processedClasses, InitContext context) {
+ public Similarity getSimilarity() {
+ return similarity;
+ }
- DocumentId documentIdAnn = member.getAnnotation( DocumentId.class );
- if ( documentIdAnn != null ) {
- if ( isRoot ) {
- if ( idKeywordName != null ) {
- throw new AssertionFailure( "Two document id assigned: "
- + idKeywordName + " and " + BinderHelper.getAttributeName( member, documentIdAnn.name() ) );
- }
- idKeywordName = prefix + BinderHelper.getAttributeName( member, documentIdAnn.name() );
- FieldBridge fieldBridge = BridgeFactory.guessType( null, member, reflectionManager );
- if ( fieldBridge instanceof TwoWayFieldBridge ) {
- idBridge = (TwoWayFieldBridge) fieldBridge;
- }
- else {
- throw new SearchException(
- "Bridge for document id does not implement TwoWayFieldBridge: " + member.getName() );
- }
- idBoost = getBoost( member );
- setAccessible( member );
- idGetter = member;
- }
- else {
- //component should index their document id
- setAccessible( member );
- propertiesMetadata.fieldGetters.add( member );
- String fieldName = prefix + BinderHelper.getAttributeName( member, documentIdAnn.name() );
- propertiesMetadata.fieldNames.add( fieldName );
- propertiesMetadata.fieldStore.add( getStore( Store.YES ) );
- propertiesMetadata.fieldIndex.add( getIndex( Index.UN_TOKENIZED ) );
- propertiesMetadata.fieldTermVectors.add( getTermVector( TermVector.NO ) );
- propertiesMetadata.fieldBridges.add( BridgeFactory.guessType( null, member, reflectionManager ) );
- // property > entity analyzer (no field analyzer)
- Analyzer analyzer = getAnalyzer( member, context );
- if ( analyzer == null ) analyzer = propertiesMetadata.analyzer;
- if ( analyzer == null ) throw new AssertionFailure( "Analizer should not be undefined" );
- this.analyzer.addScopedAnalyzer( fieldName, analyzer );
- }
- }
- {
- org.hibernate.search.annotations.Field fieldAnn =
- member.getAnnotation( org.hibernate.search.annotations.Field.class );
- if ( fieldAnn != null ) {
- bindFieldAnnotation( member, propertiesMetadata, prefix, fieldAnn, context );
- }
- }
- {
- org.hibernate.search.annotations.Fields fieldsAnn =
- member.getAnnotation( org.hibernate.search.annotations.Fields.class );
- if ( fieldsAnn != null ) {
- for (org.hibernate.search.annotations.Field fieldAnn : fieldsAnn.value()) {
- bindFieldAnnotation( member, propertiesMetadata, prefix, fieldAnn, context );
- }
- }
- }
- getAnalyzerDefs( member, context );
+ private void initializeMember(XProperty member, PropertiesMetadata propertiesMetadata, boolean isRoot,
+ String prefix, Set<XClass> processedClasses, InitContext context) {
- IndexedEmbedded embeddedAnn = member.getAnnotation( IndexedEmbedded.class );
- if ( embeddedAnn != null ) {
- int oldMaxLevel = maxLevel;
- int potentialLevel = embeddedAnn.depth() + level;
- if ( potentialLevel < 0 ) {
- potentialLevel = Integer.MAX_VALUE;
- }
- maxLevel = potentialLevel > maxLevel ? maxLevel : potentialLevel;
- level++;
+ DocumentId documentIdAnn = member.getAnnotation(DocumentId.class);
+ if (documentIdAnn != null) {
+ if (isRoot) {
+ if (idKeywordName != null) {
+ throw new AssertionFailure("Two document id assigned: "
+ + idKeywordName + " and " + BinderHelper.getAttributeName(member, documentIdAnn.name()));
+ }
+ idKeywordName = prefix + BinderHelper.getAttributeName(member, documentIdAnn.name());
+ FieldBridge fieldBridge = BridgeFactory.guessType(null, member, reflectionManager);
+ if (fieldBridge instanceof TwoWayFieldBridge) {
+ idBridge = (TwoWayFieldBridge) fieldBridge;
+ }
+ else {
+ throw new SearchException(
+ "Bridge for document id does not implement TwoWayFieldBridge: " + member.getName());
+ }
+ idBoost = getBoost(member);
+ setAccessible(member);
+ idGetter = member;
+ }
+ else {
+ //component should index their document id
+ setAccessible(member);
+ propertiesMetadata.fieldGetters.add(member);
+ String fieldName = prefix + BinderHelper.getAttributeName(member, documentIdAnn.name());
+ propertiesMetadata.fieldNames.add(fieldName);
+ propertiesMetadata.fieldStore.add(getStore(Store.YES));
+ propertiesMetadata.fieldIndex.add(getIndex(Index.UN_TOKENIZED));
+ propertiesMetadata.fieldTermVectors.add(getTermVector(TermVector.NO));
+ propertiesMetadata.fieldBridges.add(BridgeFactory.guessType(null, member, reflectionManager));
+ // property > entity analyzer (no field analyzer)
+ Analyzer analyzer = getAnalyzer(member, context);
+ if (analyzer == null) analyzer = propertiesMetadata.analyzer;
+ if (analyzer == null) throw new AssertionFailure("Analizer should not be undefined");
+ this.analyzer.addScopedAnalyzer(fieldName, analyzer);
+ }
+ }
+ {
+ org.hibernate.search.annotations.Field fieldAnn =
+ member.getAnnotation(org.hibernate.search.annotations.Field.class);
+ if (fieldAnn != null) {
+ bindFieldAnnotation(member, propertiesMetadata, prefix, fieldAnn, context);
+ }
+ }
+ {
+ org.hibernate.search.annotations.Fields fieldsAnn =
+ member.getAnnotation(org.hibernate.search.annotations.Fields.class);
+ if (fieldsAnn != null) {
+ for (org.hibernate.search.annotations.Field fieldAnn : fieldsAnn.value()) {
+ bindFieldAnnotation(member, propertiesMetadata, prefix, fieldAnn, context);
+ }
+ }
+ }
+ getAnalyzerDefs(member, context);
- XClass elementClass;
- if ( void.class == embeddedAnn.targetElement() ) {
- elementClass = member.getElementClass();
- }
- else {
- elementClass = reflectionManager.toXClass( embeddedAnn.targetElement() );
- }
- if ( maxLevel == Integer.MAX_VALUE //infinite
- && processedClasses.contains( elementClass ) ) {
- throw new SearchException(
- "Circular reference. Duplicate use of "
- + elementClass.getName()
- + " in root entity " + beanClass.getName()
- + "#" + buildEmbeddedPrefix( prefix, embeddedAnn, member )
- );
- }
- if ( level <= maxLevel ) {
- processedClasses.add( elementClass ); //push
+ IndexedEmbedded embeddedAnn = member.getAnnotation(IndexedEmbedded.class);
+ if (embeddedAnn != null) {
+ int oldMaxLevel = maxLevel;
+ int potentialLevel = embeddedAnn.depth() + level;
+ if (potentialLevel < 0) {
+ potentialLevel = Integer.MAX_VALUE;
+ }
+ maxLevel = potentialLevel > maxLevel ? maxLevel : potentialLevel;
+ level++;
- setAccessible( member );
- propertiesMetadata.embeddedGetters.add( member );
- PropertiesMetadata metadata = new PropertiesMetadata();
- propertiesMetadata.embeddedPropertiesMetadata.add( metadata );
- metadata.boost = getBoost( member );
- //property > entity analyzer
- Analyzer analyzer = getAnalyzer( member, context );
- metadata.analyzer = analyzer != null ? analyzer : propertiesMetadata.analyzer;
- String localPrefix = buildEmbeddedPrefix( prefix, embeddedAnn, member );
- initializeMembers( elementClass, metadata, false, localPrefix, processedClasses, context );
- /**
- * We will only index the "expected" type but that's OK, HQL cannot do downcasting either
- */
- if ( member.isArray() ) {
- propertiesMetadata.embeddedContainers.add( PropertiesMetadata.Container.ARRAY );
- }
- else if ( member.isCollection() ) {
- if ( Map.class.equals( member.getCollectionClass() ) ) {
- //hum subclasses etc etc??
- propertiesMetadata.embeddedContainers.add( PropertiesMetadata.Container.MAP );
- }
- else {
- propertiesMetadata.embeddedContainers.add( PropertiesMetadata.Container.COLLECTION );
- }
- }
- else {
- propertiesMetadata.embeddedContainers.add( PropertiesMetadata.Container.OBJECT );
- }
+ XClass elementClass;
+ if (void.class == embeddedAnn.targetElement()) {
+ elementClass = member.getElementClass();
+ }
+ else {
+ elementClass = reflectionManager.toXClass(embeddedAnn.targetElement());
+ }
+ if (maxLevel == Integer.MAX_VALUE //infinite
+ && processedClasses.contains(elementClass)) {
+ throw new SearchException(
+ "Circular reference. Duplicate use of "
+ + elementClass.getName()
+ + " in root entity " + beanClass.getName()
+ + "#" + buildEmbeddedPrefix(prefix, embeddedAnn, member)
+ );
+ }
+ if (level <= maxLevel) {
+ processedClasses.add(elementClass); //push
- processedClasses.remove( elementClass ); //pop
- }
- else if ( log.isTraceEnabled() ) {
- String localPrefix = buildEmbeddedPrefix( prefix, embeddedAnn, member );
- log.trace( "depth reached, ignoring {}", localPrefix );
- }
+ setAccessible(member);
+ propertiesMetadata.embeddedGetters.add(member);
+ PropertiesMetadata metadata = new PropertiesMetadata();
+ propertiesMetadata.embeddedPropertiesMetadata.add(metadata);
+ metadata.boost = getBoost(member);
+ //property > entity analyzer
+ Analyzer analyzer = getAnalyzer(member, context);
+ metadata.analyzer = analyzer != null ? analyzer : propertiesMetadata.analyzer;
+ String localPrefix = buildEmbeddedPrefix(prefix, embeddedAnn, member);
+ initializeMembers(elementClass, metadata, false, localPrefix, processedClasses, context);
+ /**
+ * We will only index the "expected" type but that's OK, HQL cannot do downcasting either
+ */
+ if (member.isArray()) {
+ propertiesMetadata.embeddedContainers.add(PropertiesMetadata.Container.ARRAY);
+ }
+ else
+ if (member.isCollection()) {
+ if (Map.class.equals(member.getCollectionClass())) {
+ //hum subclasses etc etc??
+ propertiesMetadata.embeddedContainers.add(PropertiesMetadata.Container.MAP);
+ }
+ else {
+ propertiesMetadata.embeddedContainers.add(PropertiesMetadata.Container.COLLECTION);
+ }
+ }
+ else {
+ propertiesMetadata.embeddedContainers.add(PropertiesMetadata.Container.OBJECT);
+ }
- level--;
- maxLevel = oldMaxLevel; //set back the the old max level
- }
+ processedClasses.remove(elementClass); //pop
+ }
+ else
+ if (log.isTraceEnabled()) {
+ String localPrefix = buildEmbeddedPrefix(prefix, embeddedAnn, member);
+ log.trace("depth reached, ignoring {}", localPrefix);
+ }
- ContainedIn containedAnn = member.getAnnotation( ContainedIn.class );
- if ( containedAnn != null ) {
- setAccessible( member );
- propertiesMetadata.containedInGetters.add( member );
- }
- }
+ level--;
+ maxLevel = oldMaxLevel; //set back the the old max level
+ }
- private void bindClassAnnotation(String prefix, PropertiesMetadata propertiesMetadata, ClassBridge ann, InitContext context) {
- //FIXME name should be prefixed
- String fieldName = prefix + ann.name();
- propertiesMetadata.classNames.add( fieldName );
- propertiesMetadata.classStores.add( getStore( ann.store() ) );
- propertiesMetadata.classIndexes.add( getIndex( ann.index() ) );
- propertiesMetadata.classTermVectors.add( getTermVector( ann.termVector() ) );
- propertiesMetadata.classBridges.add( BridgeFactory.extractType( ann ) );
- propertiesMetadata.classBoosts.add( ann.boost().value() );
+ ContainedIn containedAnn = member.getAnnotation(ContainedIn.class);
+ if (containedAnn != null) {
+ setAccessible(member);
+ propertiesMetadata.containedInGetters.add(member);
+ }
+ }
- Analyzer analyzer = getAnalyzer( ann.analyzer(), context );
- if ( analyzer == null ) analyzer = propertiesMetadata.analyzer;
- if ( analyzer == null ) throw new AssertionFailure( "Analyzer should not be undefined" );
- this.analyzer.addScopedAnalyzer( fieldName, analyzer );
- }
+ private void bindClassAnnotation(String prefix, PropertiesMetadata propertiesMetadata, ClassBridge ann, InitContext context) {
+ //FIXME name should be prefixed
+ String fieldName = prefix + ann.name();
+ propertiesMetadata.classNames.add(fieldName);
+ propertiesMetadata.classStores.add(getStore(ann.store()));
+ propertiesMetadata.classIndexes.add(getIndex(ann.index()));
+ propertiesMetadata.classTermVectors.add(getTermVector(ann.termVector()));
+ propertiesMetadata.classBridges.add(BridgeFactory.extractType(ann));
+ propertiesMetadata.classBoosts.add(ann.boost().value());
- private void bindFieldAnnotation(XProperty member, PropertiesMetadata propertiesMetadata, String prefix, org.hibernate.search.annotations.Field fieldAnn, InitContext context) {
- setAccessible( member );
- propertiesMetadata.fieldGetters.add( member );
- String fieldName = prefix + BinderHelper.getAttributeName( member, fieldAnn.name() );
- propertiesMetadata.fieldNames.add( fieldName );
- propertiesMetadata.fieldStore.add( getStore( fieldAnn.store() ) );
- propertiesMetadata.fieldIndex.add( getIndex( fieldAnn.index() ) );
- propertiesMetadata.fieldTermVectors.add( getTermVector( fieldAnn.termVector() ) );
- propertiesMetadata.fieldBridges.add( BridgeFactory.guessType( fieldAnn, member, reflectionManager ) );
+ Analyzer analyzer = getAnalyzer(ann.analyzer(), context);
+ if (analyzer == null) analyzer = propertiesMetadata.analyzer;
+ if (analyzer == null) throw new AssertionFailure("Analyzer should not be undefined");
+ this.analyzer.addScopedAnalyzer(fieldName, analyzer);
+ }
- // Field > property > entity analyzer
- Analyzer analyzer = getAnalyzer( fieldAnn.analyzer(), context );
- if ( analyzer == null ) analyzer = getAnalyzer( member, context );
- if ( analyzer == null ) analyzer = propertiesMetadata.analyzer;
- if ( analyzer == null ) throw new AssertionFailure( "Analizer should not be undefined" );
- this.analyzer.addScopedAnalyzer( fieldName, analyzer );
- }
+ private void bindFieldAnnotation(XProperty member, PropertiesMetadata propertiesMetadata, String prefix, org.hibernate.search.annotations.Field fieldAnn, InitContext context) {
+ setAccessible(member);
+ propertiesMetadata.fieldGetters.add(member);
+ String fieldName = prefix + BinderHelper.getAttributeName(member, fieldAnn.name());
+ propertiesMetadata.fieldNames.add(fieldName);
+ propertiesMetadata.fieldStore.add(getStore(fieldAnn.store()));
+ propertiesMetadata.fieldIndex.add(getIndex(fieldAnn.index()));
+ propertiesMetadata.fieldTermVectors.add(getTermVector(fieldAnn.termVector()));
+ propertiesMetadata.fieldBridges.add(BridgeFactory.guessType(fieldAnn, member, reflectionManager));
- private String buildEmbeddedPrefix(String prefix, IndexedEmbedded embeddedAnn, XProperty member) {
- String localPrefix = prefix;
- if ( ".".equals( embeddedAnn.prefix() ) ) {
- //default to property name
- localPrefix += member.getName() + '.';
- }
- else {
- localPrefix += embeddedAnn.prefix();
- }
- return localPrefix;
- }
+ // Field > property > entity analyzer
+ Analyzer analyzer = getAnalyzer(fieldAnn.analyzer(), context);
+ if (analyzer == null) analyzer = getAnalyzer(member, context);
+ if (analyzer == null) analyzer = propertiesMetadata.analyzer;
+ if (analyzer == null) throw new AssertionFailure("Analizer should not be undefined");
+ this.analyzer.addScopedAnalyzer(fieldName, analyzer);
+ }
- private Field.Store getStore(Store store) {
- switch ( store ) {
- case NO:
- return Field.Store.NO;
- case YES:
- return Field.Store.YES;
- case COMPRESS:
- return Field.Store.COMPRESS;
- default:
- throw new AssertionFailure( "Unexpected Store: " + store );
- }
- }
+ private String buildEmbeddedPrefix(String prefix, IndexedEmbedded embeddedAnn, XProperty member) {
+ String localPrefix = prefix;
+ if (".".equals(embeddedAnn.prefix())) {
+ //default to property name
+ localPrefix += member.getName() + '.';
+ }
+ else {
+ localPrefix += embeddedAnn.prefix();
+ }
+ return localPrefix;
+ }
- private Field.TermVector getTermVector(TermVector vector) {
- switch ( vector ) {
- case NO:
- return Field.TermVector.NO;
- case YES:
- return Field.TermVector.YES;
- case WITH_OFFSETS:
- return Field.TermVector.WITH_OFFSETS;
- case WITH_POSITIONS:
- return Field.TermVector.WITH_POSITIONS;
- case WITH_POSITION_OFFSETS:
- return Field.TermVector.WITH_POSITIONS_OFFSETS;
- default:
- throw new AssertionFailure( "Unexpected TermVector: " + vector );
- }
- }
+ private Field.Store getStore(Store store) {
+ switch (store) {
+ case NO:
+ return Field.Store.NO;
+ case YES:
+ return Field.Store.YES;
+ case COMPRESS:
+ return Field.Store.COMPRESS;
+ default:
+ throw new AssertionFailure("Unexpected Store: " + store);
+ }
+ }
- private Field.Index getIndex(Index index) {
- switch ( index ) {
- case NO:
- return Field.Index.NO;
- case NO_NORMS:
- return Field.Index.NO_NORMS;
- case TOKENIZED:
- return Field.Index.TOKENIZED;
- case UN_TOKENIZED:
- return Field.Index.UN_TOKENIZED;
- default:
- throw new AssertionFailure( "Unexpected Index: " + index );
- }
- }
+ private Field.TermVector getTermVector(TermVector vector) {
+ switch (vector) {
+ case NO:
+ return Field.TermVector.NO;
+ case YES:
+ return Field.TermVector.YES;
+ case WITH_OFFSETS:
+ return Field.TermVector.WITH_OFFSETS;
+ case WITH_POSITIONS:
+ return Field.TermVector.WITH_POSITIONS;
+ case WITH_POSITION_OFFSETS:
+ return Field.TermVector.WITH_POSITIONS_OFFSETS;
+ default:
+ throw new AssertionFailure("Unexpected TermVector: " + vector);
+ }
+ }
- private Float getBoost(XAnnotatedElement element) {
- if ( element == null ) return null;
- Boost boost = element.getAnnotation( Boost.class );
- return boost != null ?
- boost.value() :
- null;
- }
+ private Field.Index getIndex(Index index) {
+ switch (index) {
+ case NO:
+ return Field.Index.NO;
+ case NO_NORMS:
+ return Field.Index.NO_NORMS;
+ case TOKENIZED:
+ return Field.Index.TOKENIZED;
+ case UN_TOKENIZED:
+ return Field.Index.UN_TOKENIZED;
+ default:
+ throw new AssertionFailure("Unexpected Index: " + index);
+ }
+ }
- private Object getMemberValue(Object bean, XMember getter) {
- Object value;
- try {
- value = getter.invoke( bean );
- }
- catch (Exception e) {
- throw new IllegalStateException( "Could not get property value", e );
- }
- return value;
- }
+ private Float getBoost(XAnnotatedElement element) {
+ if (element == null) return null;
+ Boost boost = element.getAnnotation(Boost.class);
+ return boost != null ?
+ boost.value() :
+ null;
+ }
- //TODO could we use T instead of EntityClass?
- public void addWorkToQueue(Class entityClass, T entity, Serializable id, WorkType workType, List<LuceneWork> queue, SearchFactoryImplementor searchFactoryImplementor) {
- //TODO with the caller loop we are in a n^2: optimize it using a HashMap for work recognition
- for (LuceneWork luceneWork : queue) {
- //any work on the same entity should be ignored
- if ( luceneWork.getEntityClass() == entityClass
- ) {
- Serializable currentId = luceneWork.getId();
- if ( currentId != null && currentId.equals( id ) ) { //find a way to use Type.equals(x,y)
- return;
- }
- //TODO do something to avoid multiple PURGE ALL and OPTIMIZE
- }
+ private Object getMemberValue(Object bean, XMember getter) {
+ Object value;
+ try {
+ value = getter.invoke(bean);
+ }
+ catch (Exception e) {
+ throw new IllegalStateException("Could not get property value", e);
+ }
+ return value;
+ }
- }
- boolean searchForContainers = false;
- String idInString = idBridge.objectToString( id );
- if ( workType == WorkType.ADD ) {
- Document doc = getDocument( entity, id );
- queue.add( new AddLuceneWork( id, idInString, entityClass, doc ) );
- searchForContainers = true;
- }
- else if ( workType == WorkType.DELETE || workType == WorkType.PURGE ) {
- queue.add( new DeleteLuceneWork( id, idInString, entityClass ) );
- }
- else if ( workType == WorkType.PURGE_ALL ) {
- queue.add( new PurgeAllLuceneWork( entityClass ) );
- }
- else if ( workType == WorkType.UPDATE || workType == WorkType.COLLECTION ) {
- Document doc = getDocument( entity, id );
- /**
- * even with Lucene 2.1, use of indexWriter to update is not an option
- * We can only delete by term, and the index doesn't have a term that
- * uniquely identify the entry.
- * But essentially the optimization we are doing is the same Lucene is doing, the only extra cost is the
- * double file opening.
- */
- queue.add( new DeleteLuceneWork( id, idInString, entityClass ) );
- queue.add( new AddLuceneWork( id, idInString, entityClass, doc ) );
- searchForContainers = true;
- }
- else if ( workType == WorkType.INDEX ) {
- Document doc = getDocument( entity, id );
- queue.add( new DeleteLuceneWork( id, idInString, entityClass ) );
- LuceneWork work = new AddLuceneWork( id, idInString, entityClass, doc );
- work.setBatch( true );
- queue.add( work );
- searchForContainers = true;
- }
+ //TODO could we use T instead of EntityClass?
+ public void addWorkToQueue(Class entityClass, T entity, Serializable id, WorkType workType, List<LuceneWork> queue, SearchFactoryImplementor searchFactoryImplementor) {
+ //TODO with the caller loop we are in a n^2: optimize it using a HashMap for work recognition
+ for (LuceneWork luceneWork : queue) {
+ //any work on the same entity should be ignored
+ if (luceneWork.getEntityClass() == entityClass
+ ) {
+ Serializable currentId = luceneWork.getId();
+ if (currentId != null && currentId.equals(id)) { //find a way to use Type.equals(x,y)
+ return;
+ }
+ //TODO do something to avoid multiple PURGE ALL and OPTIMIZE
+ }
- else {
- throw new AssertionFailure( "Unknown WorkType: " + workType );
- }
+ }
+ boolean searchForContainers = false;
+ String idInString = idBridge.objectToString(id);
+ if (workType == WorkType.ADD) {
+ Document doc = getDocument(entity, id);
+ queue.add(new AddLuceneWork(id, idInString, entityClass, doc));
+ searchForContainers = true;
+ }
+ else
+ if (workType == WorkType.DELETE || workType == WorkType.PURGE) {
+ queue.add(new DeleteLuceneWork(id, idInString, entityClass));
+ }
+ else
+ if (workType == WorkType.PURGE_ALL) {
+ queue.add(new PurgeAllLuceneWork(entityClass));
+ }
+ else
+ if (workType == WorkType.UPDATE || workType == WorkType.COLLECTION) {
+ Document doc = getDocument(entity, id);
+ /**
+ * even with Lucene 2.1, use of indexWriter to update is not an option
+ * We can only delete by term, and the index doesn't have a term that
+ * uniquely identify the entry.
+ * But essentially the optimization we are doing is the same Lucene is doing, the only extra cost is the
+ * double file opening.
+ */
+ queue.add(new DeleteLuceneWork(id, idInString, entityClass));
+ queue.add(new AddLuceneWork(id, idInString, entityClass, doc));
+ searchForContainers = true;
+ }
+ else
+ if (workType == WorkType.INDEX) {
+ Document doc = getDocument(entity, id);
+ queue.add(new DeleteLuceneWork(id, idInString, entityClass));
+ LuceneWork work = new AddLuceneWork(id, idInString, entityClass, doc);
+ work.setBatch(true);
+ queue.add(work);
+ searchForContainers = true;
+ }
- /**
- * When references are changed, either null or another one, we expect dirty checking to be triggered (both sides
- * have to be updated)
- * When the internal object is changed, we apply the {Add|Update}Work on containedIns
- */
- if ( searchForContainers ) {
- processContainedIn( entity, queue, rootPropertiesMetadata, searchFactoryImplementor );
- }
- }
+ else {
+ throw new AssertionFailure("Unknown WorkType: " + workType);
+ }
- private void processContainedIn(Object instance, List<LuceneWork> queue, PropertiesMetadata metadata, SearchFactoryImplementor searchFactoryImplementor) {
- for (int i = 0; i < metadata.containedInGetters.size(); i++) {
- XMember member = metadata.containedInGetters.get( i );
- Object value = getMemberValue( instance, member );
- if ( value == null ) continue;
+ /**
+ * When references are changed, either null or another one, we expect dirty checking to be triggered (both sides
+ * have to be updated)
+ * When the internal object is changed, we apply the {Add|Update}Work on containedIns
+ */
+ if (searchForContainers) {
+ processContainedIn(entity, queue, rootPropertiesMetadata, searchFactoryImplementor);
+ }
+ }
- if ( member.isArray() ) {
- for (Object arrayValue : (Object[]) value) {
- //highly inneficient but safe wrt the actual targeted class
- Class valueClass = Hibernate.getClass( arrayValue );
- DocumentBuilder builder = searchFactoryImplementor.getDocumentBuilders().get( valueClass );
- if ( builder == null ) continue;
- processContainedInValue( arrayValue, queue, valueClass, builder, searchFactoryImplementor );
- }
- }
- else if ( member.isCollection() ) {
- Collection collection;
- if ( Map.class.equals( member.getCollectionClass() ) ) {
- //hum
- collection = ( (Map) value ).values();
- }
- else {
- collection = (Collection) value;
- }
- for (Object collectionValue : collection) {
- //highly inneficient but safe wrt the actual targeted class
- Class valueClass = Hibernate.getClass( collectionValue );
- DocumentBuilder builder = searchFactoryImplementor.getDocumentBuilders().get( valueClass );
- if ( builder == null ) continue;
- processContainedInValue( collectionValue, queue, valueClass, builder, searchFactoryImplementor );
- }
- }
- else {
- Class valueClass = Hibernate.getClass( value );
- DocumentBuilder builder = searchFactoryImplementor.getDocumentBuilders().get( valueClass );
- if ( builder == null ) continue;
- processContainedInValue( value, queue, valueClass, builder, searchFactoryImplementor );
- }
- }
- //an embedded cannot have a useful @ContainedIn (no shared reference)
- //do not walk through them
- }
+ private void processContainedIn(Object instance, List<LuceneWork> queue, PropertiesMetadata metadata, SearchFactoryImplementor searchFactoryImplementor) {
+ for (int i = 0; i < metadata.containedInGetters.size(); i++) {
+ XMember member = metadata.containedInGetters.get(i);
+ Object value = getMemberValue(instance, member);
+ if (value == null) continue;
- private void processContainedInValue(Object value, List<LuceneWork> queue, Class valueClass,
- DocumentBuilder builder, SearchFactoryImplementor searchFactoryImplementor) {
- Serializable id = (Serializable) builder.getMemberValue( value, builder.idGetter );
- builder.addWorkToQueue( valueClass, value, id, WorkType.UPDATE, queue, searchFactoryImplementor );
- }
+ if (member.isArray()) {
+ for (Object arrayValue : (Object[]) value) {
+ //highly inneficient but safe wrt the actual targeted class
+ Class valueClass = Hibernate.getClass(arrayValue);
+ DocumentBuilder builder = searchFactoryImplementor.getDocumentBuilders().get(valueClass);
+ if (builder == null) continue;
+ processContainedInValue(arrayValue, queue, valueClass, builder, searchFactoryImplementor);
+ }
+ }
+ else
+ if (member.isCollection()) {
+ Collection collection;
+ if (Map.class.equals(member.getCollectionClass())) {
+ //hum
+ collection = ((Map) value).values();
+ }
+ else {
+ collection = (Collection) value;
+ }
+ for (Object collectionValue : collection) {
+ //highly inneficient but safe wrt the actual targeted class
+ Class valueClass = Hibernate.getClass(collectionValue);
+ DocumentBuilder builder = searchFactoryImplementor.getDocumentBuilders().get(valueClass);
+ if (builder == null) continue;
+ processContainedInValue(collectionValue, queue, valueClass, builder, searchFactoryImplementor);
+ }
+ }
+ else {
+ Class valueClass = Hibernate.getClass(value);
+ DocumentBuilder builder = searchFactoryImplementor.getDocumentBuilders().get(valueClass);
+ if (builder == null) continue;
+ processContainedInValue(value, queue, valueClass, builder, searchFactoryImplementor);
+ }
+ }
+ //an embedded cannot have a useful @ContainedIn (no shared reference)
+ //do not walk through them
+ }
- public Document getDocument(T instance, Serializable id) {
- Document doc = new Document();
- XClass instanceClass = reflectionManager.toXClass( Hibernate.getClass( instance ) );
- if ( rootPropertiesMetadata.boost != null ) {
- doc.setBoost( rootPropertiesMetadata.boost );
- }
- {
- Field classField =
- new Field( CLASS_FIELDNAME, instanceClass.getName(), Field.Store.YES, Field.Index.UN_TOKENIZED, Field.TermVector.NO );
- doc.add( classField );
- LuceneOptions luceneOptions = new LuceneOptions( Field.Store.YES,
- Field.Index.UN_TOKENIZED, Field.TermVector.NO, idBoost );
- idBridge.set( idKeywordName, id, doc, luceneOptions );
- }
- buildDocumentFields( instance, doc, rootPropertiesMetadata );
- return doc;
- }
+ private void processContainedInValue(Object value, List<LuceneWork> queue, Class valueClass,
+ DocumentBuilder builder, SearchFactoryImplementor searchFactoryImplementor) {
+ Serializable id = (Serializable) builder.getMemberValue(value, builder.idGetter);
+ builder.addWorkToQueue(valueClass, value, id, WorkType.UPDATE, queue, searchFactoryImplementor);
+ }
- private void buildDocumentFields(Object instance, Document doc, PropertiesMetadata propertiesMetadata) {
- if ( instance == null ) return;
- //needed for field access: I cannot work in the proxied version
- Object unproxiedInstance = unproxy( instance );
- for (int i = 0; i < propertiesMetadata.classBridges.size(); i++) {
- FieldBridge fb = propertiesMetadata.classBridges.get( i );
- fb.set( propertiesMetadata.classNames.get( i ), unproxiedInstance,
- doc, propertiesMetadata.getClassLuceneOptions( i ) );
- }
- for (int i = 0; i < propertiesMetadata.fieldNames.size(); i++) {
- XMember member = propertiesMetadata.fieldGetters.get( i );
- Object value = getMemberValue( unproxiedInstance, member );
- propertiesMetadata.fieldBridges.get( i ).set(
- propertiesMetadata.fieldNames.get( i ), value, doc,
- propertiesMetadata.getFieldLuceneOptions( i, getBoost( member ) ) );
- }
- for (int i = 0; i < propertiesMetadata.embeddedGetters.size(); i++) {
- XMember member = propertiesMetadata.embeddedGetters.get( i );
- Object value = getMemberValue( unproxiedInstance, member );
- //TODO handle boost at embedded level: already stored in propertiesMedatada.boost
+ public Document getDocument(T instance, Serializable id) {
+ Document doc = new Document();
+ XClass instanceClass = reflectionManager.toXClass(Hibernate.getClass(instance));
+ if (rootPropertiesMetadata.boost != null) {
+ doc.setBoost(rootPropertiesMetadata.boost);
+ }
+ {
+ Field classField =
+ new Field(CLASS_FIELDNAME, instanceClass.getName(), Field.Store.YES, Field.Index.UN_TOKENIZED, Field.TermVector.NO);
+ doc.add(classField);
+ LuceneOptions luceneOptions = new LuceneOptions(Field.Store.YES,
+ Field.Index.UN_TOKENIZED, Field.TermVector.NO, idBoost);
+ idBridge.set(idKeywordName, id, doc, luceneOptions);
+ }
+ buildDocumentFields(instance, doc, rootPropertiesMetadata);
+ return doc;
+ }
- if ( value == null ) continue;
- PropertiesMetadata embeddedMetadata = propertiesMetadata.embeddedPropertiesMetadata.get( i );
- switch ( propertiesMetadata.embeddedContainers.get( i ) ) {
- case ARRAY:
- for (Object arrayValue : (Object[]) value) {
- buildDocumentFields( arrayValue, doc, embeddedMetadata );
- }
- break;
- case COLLECTION:
- for (Object collectionValue : (Collection) value) {
- buildDocumentFields( collectionValue, doc, embeddedMetadata );
- }
- break;
- case MAP:
- for (Object collectionValue : ( (Map) value ).values()) {
- buildDocumentFields( collectionValue, doc, embeddedMetadata );
- }
- break;
- case OBJECT:
- buildDocumentFields( value, doc, embeddedMetadata );
- break;
- default:
- throw new AssertionFailure( "Unknown embedded container: "
- + propertiesMetadata.embeddedContainers.get( i ) );
- }
- }
- }
+ private void buildDocumentFields(Object instance, Document doc, PropertiesMetadata propertiesMetadata) {
+ if (instance == null) return;
+ //needed for field access: I cannot work in the proxied version
+ Object unproxiedInstance = unproxy(instance);
+ for (int i = 0; i < propertiesMetadata.classBridges.size(); i++) {
+ FieldBridge fb = propertiesMetadata.classBridges.get(i);
+ fb.set(propertiesMetadata.classNames.get(i), unproxiedInstance,
+ doc, propertiesMetadata.getClassLuceneOptions(i));
+ }
+ for (int i = 0; i < propertiesMetadata.fieldNames.size(); i++) {
+ XMember member = propertiesMetadata.fieldGetters.get(i);
+ Object value = getMemberValue(unproxiedInstance, member);
+ propertiesMetadata.fieldBridges.get(i).set(
+ propertiesMetadata.fieldNames.get(i), value, doc,
+ propertiesMetadata.getFieldLuceneOptions(i, getBoost(member)));
+ }
+ for (int i = 0; i < propertiesMetadata.embeddedGetters.size(); i++) {
+ XMember member = propertiesMetadata.embeddedGetters.get(i);
+ Object value = getMemberValue(unproxiedInstance, member);
+ //TODO handle boost at embedded level: already stored in propertiesMedatada.boost
- private Object unproxy(Object value) {
- //FIXME this service should be part of Core?
- if ( value instanceof HibernateProxy ) {
- // .getImplementation() initializes the data by side effect
- value = ( (HibernateProxy) value ).getHibernateLazyInitializer()
- .getImplementation();
- }
- return value;
- }
+ if (value == null) continue;
+ PropertiesMetadata embeddedMetadata = propertiesMetadata.embeddedPropertiesMetadata.get(i);
+ switch (propertiesMetadata.embeddedContainers.get(i)) {
+ case ARRAY:
+ for (Object arrayValue : (Object[]) value) {
+ buildDocumentFields(arrayValue, doc, embeddedMetadata);
+ }
+ break;
+ case COLLECTION:
+ for (Object collectionValue : (Collection) value) {
+ buildDocumentFields(collectionValue, doc, embeddedMetadata);
+ }
+ break;
+ case MAP:
+ for (Object collectionValue : ((Map) value).values()) {
+ buildDocumentFields(collectionValue, doc, embeddedMetadata);
+ }
+ break;
+ case OBJECT:
+ buildDocumentFields(value, doc, embeddedMetadata);
+ break;
+ default:
+ throw new AssertionFailure("Unknown embedded container: "
+ + propertiesMetadata.embeddedContainers.get(i));
+ }
+ }
+ }
- public Term getTerm(Serializable id) {
- if ( idProvided ) {
- return new Term( idKeywordName, (String) id );
- }
+ private Object unproxy(Object value) {
+ //FIXME this service should be part of Core?
+ if (value instanceof HibernateProxy) {
+ // .getImplementation() initializes the data by side effect
+ value = ((HibernateProxy) value).getHibernateLazyInitializer()
+ .getImplementation();
+ }
+ return value;
+ }
- return new Term( idKeywordName, idBridge.objectToString( id ) );
- }
+ public Term getTerm(Serializable id) {
+ if (idProvided) {
+ return new Term(idKeywordName, (String) id);
+ }
- public DirectoryProvider[] getDirectoryProviders() {
- return directoryProviders;
- }
+ return new Term(idKeywordName, idBridge.objectToString(id));
+ }
- public IndexShardingStrategy getDirectoryProviderSelectionStrategy() {
- return shardingStrategy;
- }
+ public DirectoryProvider[] getDirectoryProviders() {
+ return directoryProviders;
+ }
- public Analyzer getAnalyzer() {
- return analyzer;
- }
+ public IndexShardingStrategy getDirectoryProviderSelectionStrategy() {
+ return shardingStrategy;
+ }
- private static void setAccessible(XMember member) {
- if ( !Modifier.isPublic( member.getModifiers() ) ) {
- member.setAccessible( true );
- }
- }
+ public Analyzer getAnalyzer() {
+ return analyzer;
+ }
- public TwoWayFieldBridge getIdBridge() {
- return idBridge;
- }
+ private static void setAccessible(XMember member) {
+ if (!Modifier.isPublic(member.getModifiers())) {
+ member.setAccessible(true);
+ }
+ }
- public String getIdKeywordName() {
- return idKeywordName;
- }
+ public TwoWayFieldBridge getIdBridge() {
+ return idBridge;
+ }
- public static Class getDocumentClass(Document document) {
- String className = document.get( DocumentBuilder.CLASS_FIELDNAME );
- try {
- return ReflectHelper.classForName( className );
- }
- catch (ClassNotFoundException e) {
- throw new SearchException( "Unable to load indexed class: " + className, e );
- }
- }
+ public String getIdKeywordName() {
+ return idKeywordName;
+ }
- public static Serializable getDocumentId(SearchFactoryImplementor searchFactoryImplementor, Class clazz, Document document) {
- DocumentBuilder builder = searchFactoryImplementor.getDocumentBuilders().get( clazz );
- if ( builder == null ) throw new SearchException( "No Lucene configuration set up for: " + clazz.getName() );
- return (Serializable) builder.getIdBridge().get( builder.getIdKeywordName(), document );
- }
+ public static Class getDocumentClass(Document document) {
+ String className = document.get(DocumentBuilder.CLASS_FIELDNAME);
+ try {
+ return ReflectHelper.classForName(className);
+ }
+ catch (ClassNotFoundException e) {
+ throw new SearchException("Unable to load indexed class: " + className, e);
+ }
+ }
- public static Object[] getDocumentFields(SearchFactoryImplementor searchFactoryImplementor, Class clazz, Document document, String[] fields) {
- DocumentBuilder builder = searchFactoryImplementor.getDocumentBuilders().get( clazz );
- if ( builder == null ) throw new SearchException( "No Lucene configuration set up for: " + clazz.getName() );
- final int fieldNbr = fields.length;
- Object[] result = new Object[fieldNbr];
+ public static Serializable getDocumentId(SearchFactoryImplementor searchFactoryImplementor, Class clazz, Document document) {
+ DocumentBuilder builder = searchFactoryImplementor.getDocumentBuilders().get(clazz);
+ if (builder == null) throw new SearchException("No Lucene configuration set up for: " + clazz.getName());
+ return (Serializable) builder.getIdBridge().get(builder.getIdKeywordName(), document);
+ }
- if ( builder.idKeywordName != null ) {
- populateResult( builder.idKeywordName, builder.idBridge, Field.Store.YES, fields, result, document );
- }
+ public static Object[] getDocumentFields(SearchFactoryImplementor searchFactoryImplementor, Class clazz, Document document, String[] fields) {
+ DocumentBuilder builder = searchFactoryImplementor.getDocumentBuilders().get(clazz);
+ if (builder == null) throw new SearchException("No Lucene configuration set up for: " + clazz.getName());
+ final int fieldNbr = fields.length;
+ Object[] result = new Object[fieldNbr];
- final PropertiesMetadata metadata = builder.rootPropertiesMetadata;
- processFieldsForProjection( metadata, fields, result, document );
- return result;
- }
+ if (builder.idKeywordName != null) {
+ populateResult(builder.idKeywordName, builder.idBridge, Field.Store.YES, fields, result, document);
+ }
- private static void processFieldsForProjection(PropertiesMetadata metadata, String[] fields, Object[] result, Document document) {
- final int nbrFoEntityFields = metadata.fieldNames.size();
- for (int index = 0; index < nbrFoEntityFields; index++) {
- populateResult( metadata.fieldNames.get( index ),
- metadata.fieldBridges.get( index ),
- metadata.fieldStore.get( index ),
- fields,
- result,
- document
- );
- }
- final int nbrOfEmbeddedObjects = metadata.embeddedPropertiesMetadata.size();
- for (int index = 0; index < nbrOfEmbeddedObjects; index++) {
- //there is nothing we can do for collections
- if ( metadata.embeddedContainers.get( index ) == PropertiesMetadata.Container.OBJECT ) {
- processFieldsForProjection( metadata.embeddedPropertiesMetadata.get( index ), fields, result, document );
- }
- }
- }
+ final PropertiesMetadata metadata = builder.rootPropertiesMetadata;
+ processFieldsForProjection(metadata, fields, result, document);
+ return result;
+ }
- private static void populateResult(String fieldName, FieldBridge fieldBridge, Field.Store store,
- String[] fields, Object[] result, Document document) {
- int matchingPosition = getFieldPosition( fields, fieldName );
- if ( matchingPosition != -1 ) {
- //TODO make use of an isTwoWay() method
- if ( store != Field.Store.NO && TwoWayFieldBridge.class.isAssignableFrom( fieldBridge.getClass() ) ) {
- result[matchingPosition] = ( (TwoWayFieldBridge) fieldBridge ).get( fieldName, document );
- if ( log.isTraceEnabled() ) {
- log.trace( "Field {} projected as {}", fieldName, result[matchingPosition] );
- }
- }
- else {
- if ( store == Field.Store.NO ) {
- throw new SearchException( "Projecting an unstored field: " + fieldName );
- }
- else {
- throw new SearchException( "FieldBridge is not a TwoWayFieldBridge: " + fieldBridge.getClass() );
- }
- }
- }
- }
+ private static void processFieldsForProjection(PropertiesMetadata metadata, String[] fields, Object[] result, Document document) {
+ final int nbrFoEntityFields = metadata.fieldNames.size();
+ for (int index = 0; index < nbrFoEntityFields; index++) {
+ populateResult(metadata.fieldNames.get(index),
+ metadata.fieldBridges.get(index),
+ metadata.fieldStore.get(index),
+ fields,
+ result,
+ document
+ );
+ }
+ final int nbrOfEmbeddedObjects = metadata.embeddedPropertiesMetadata.size();
+ for (int index = 0; index < nbrOfEmbeddedObjects; index++) {
+ //there is nothing we can do for collections
+ if (metadata.embeddedContainers.get(index) == PropertiesMetadata.Container.OBJECT) {
+ processFieldsForProjection(metadata.embeddedPropertiesMetadata.get(index), fields, result, document);
+ }
+ }
+ }
- private static int getFieldPosition(String[] fields, String fieldName) {
- int fieldNbr = fields.length;
- for (int index = 0; index < fieldNbr; index++) {
- if ( fieldName.equals( fields[index] ) ) return index;
- }
- return -1;
- }
+ private static void populateResult(String fieldName, FieldBridge fieldBridge, Field.Store store,
+ String[] fields, Object[] result, Document document) {
+ int matchingPosition = getFieldPosition(fields, fieldName);
+ if (matchingPosition != -1) {
+ //TODO make use of an isTwoWay() method
+ if (store != Field.Store.NO && TwoWayFieldBridge.class.isAssignableFrom(fieldBridge.getClass())) {
+ result[matchingPosition] = ((TwoWayFieldBridge) fieldBridge).get(fieldName, document);
+ if (log.isTraceEnabled()) {
+ log.trace("Field {} projected as {}", fieldName, result[matchingPosition]);
+ }
+ }
+ else {
+ if (store == Field.Store.NO) {
+ throw new SearchException("Projecting an unstored field: " + fieldName);
+ }
+ else {
+ throw new SearchException("FieldBridge is not a TwoWayFieldBridge: " + fieldBridge.getClass());
+ }
+ }
+ }
+ }
- public void postInitialize(Set<Class> indexedClasses) {
- //this method does not requires synchronization
- Class plainClass = reflectionManager.toClass( beanClass );
- Set<Class> tempMappedSubclasses = new HashSet<Class>();
- //together with the caller this creates a o(2), but I think it's still faster than create the up hierarchy for each class
- for (Class currentClass : indexedClasses) {
- if ( plainClass.isAssignableFrom( currentClass ) ) tempMappedSubclasses.add( currentClass );
- }
- this.mappedSubclasses = Collections.unmodifiableSet( tempMappedSubclasses );
- Class superClass = plainClass.getSuperclass();
- this.isRoot = true;
- while ( superClass != null ) {
- if ( indexedClasses.contains( superClass ) ) {
- this.isRoot = false;
- break;
- }
- superClass = superClass.getSuperclass();
- }
- }
+ private static int getFieldPosition(String[] fields, String fieldName) {
+ int fieldNbr = fields.length;
+ for (int index = 0; index < fieldNbr; index++) {
+ if (fieldName.equals(fields[index])) return index;
+ }
+ return -1;
+ }
+ public void postInitialize(Set<Class> indexedClasses) {
+ //this method does not requires synchronization
+ Class plainClass = reflectionManager.toClass(beanClass);
+ Set<Class> tempMappedSubclasses = new HashSet<Class>();
+ //together with the caller this creates a o(2), but I think it's still faster than create the up hierarchy for each class
+ for (Class currentClass : indexedClasses) {
+ if (plainClass.isAssignableFrom(currentClass)) tempMappedSubclasses.add(currentClass);
+ }
+ this.mappedSubclasses = Collections.unmodifiableSet(tempMappedSubclasses);
+ Class superClass = plainClass.getSuperclass();
+ this.isRoot = true;
+ while (superClass != null) {
+ if (indexedClasses.contains(superClass)) {
+ this.isRoot = false;
+ break;
+ }
+ superClass = superClass.getSuperclass();
+ }
+ }
- public Set<Class> getMappedSubclasses() {
- return mappedSubclasses;
- }
- /**
- * Make sure to return false if there is a risk of composite id
- * if composite id, use of (a, b) in ((1,2), (3,4)) fails on most database
- */
- public boolean isSafeFromTupleId() {
- return safeFromTupleId;
- }
+ public Set<Class> getMappedSubclasses() {
+ return mappedSubclasses;
+ }
- /**
- * Wrapper class containing all the meta data extracted out of the entities.
- */
- private static class PropertiesMetadata {
- public Float boost;
- public Analyzer analyzer;
- public final List<String> fieldNames = new ArrayList<String>();
- public final List<XMember> fieldGetters = new ArrayList<XMember>();
- public final List<FieldBridge> fieldBridges = new ArrayList<FieldBridge>();
- public final List<Field.Store> fieldStore = new ArrayList<Field.Store>();
- public final List<Field.Index> fieldIndex = new ArrayList<Field.Index>();
- public final List<Field.TermVector> fieldTermVectors = new ArrayList<Field.TermVector>();
- public final List<XMember> embeddedGetters = new ArrayList<XMember>();
- public final List<PropertiesMetadata> embeddedPropertiesMetadata = new ArrayList<PropertiesMetadata>();
- public final List<Container> embeddedContainers = new ArrayList<Container>();
- public final List<XMember> containedInGetters = new ArrayList<XMember>();
- public final List<String> classNames = new ArrayList<String>();
- public final List<Field.Store> classStores = new ArrayList<Field.Store>();
- public final List<Field.Index> classIndexes = new ArrayList<Field.Index>();
- public final List<FieldBridge> classBridges = new ArrayList<FieldBridge>();
- public final List<Field.TermVector> classTermVectors = new ArrayList<Field.TermVector>();
- public final List<Float> classBoosts = new ArrayList<Float>();
+ /**
+ * Make sure to return false if there is a risk of composite id
+ * if composite id, use of (a, b) in ((1,2), (3,4)) fails on most database
+ */
+ public boolean isSafeFromTupleId() {
+ return safeFromTupleId;
+ }
- public enum Container {
- OBJECT,
- COLLECTION,
- MAP,
- ARRAY
- }
+ /**
+ * Wrapper class containing all the meta data extracted out of the entities.
+ */
+ private static class PropertiesMetadata {
+ public Float boost;
+ public Analyzer analyzer;
+ public final List<String> fieldNames = new ArrayList<String>();
+ public final List<XMember> fieldGetters = new ArrayList<XMember>();
+ public final List<FieldBridge> fieldBridges = new ArrayList<FieldBridge>();
+ public final List<Field.Store> fieldStore = new ArrayList<Field.Store>();
+ public final List<Field.Index> fieldIndex = new ArrayList<Field.Index>();
+ public final List<Field.TermVector> fieldTermVectors = new ArrayList<Field.TermVector>();
+ public final List<XMember> embeddedGetters = new ArrayList<XMember>();
+ public final List<PropertiesMetadata> embeddedPropertiesMetadata = new ArrayList<PropertiesMetadata>();
+ public final List<Container> embeddedContainers = new ArrayList<Container>();
+ public final List<XMember> containedInGetters = new ArrayList<XMember>();
+ public final List<String> classNames = new ArrayList<String>();
+ public final List<Field.Store> classStores = new ArrayList<Field.Store>();
+ public final List<Field.Index> classIndexes = new ArrayList<Field.Index>();
+ public final List<FieldBridge> classBridges = new ArrayList<FieldBridge>();
+ public final List<Field.TermVector> classTermVectors = new ArrayList<Field.TermVector>();
+ public final List<Float> classBoosts = new ArrayList<Float>();
- private LuceneOptions getClassLuceneOptions(int i) {
- LuceneOptions options = new LuceneOptions( classStores.get( i ),
- classIndexes.get( i ), classTermVectors.get( i ), classBoosts.get( i ) );
- return options;
- }
+ public enum Container {
+ OBJECT,
+ COLLECTION,
+ MAP,
+ ARRAY
+ }
- private LuceneOptions getFieldLuceneOptions(int i, Float boost) {
- LuceneOptions options = new LuceneOptions( fieldStore.get( i ),
- fieldIndex.get( i ), fieldTermVectors.get( i ), boost );
- return options;
- }
- }
+ private LuceneOptions getClassLuceneOptions(int i) {
+ LuceneOptions options = new LuceneOptions(classStores.get(i),
+ classIndexes.get(i), classTermVectors.get(i), classBoosts.get(i));
+ return options;
+ }
+
+ private LuceneOptions getFieldLuceneOptions(int i, Float boost) {
+ LuceneOptions options = new LuceneOptions(fieldStore.get(i),
+ fieldIndex.get(i), fieldTermVectors.get(i), boost);
+ return options;
+ }
+ }
}
16 years, 1 month
Hibernate SVN: r15091 - in core/trunk: core/src/main/java/org/hibernate/cfg and 17 other directories.
by hibernate-commits@lists.jboss.org
Author: steve.ebersole(a)jboss.com
Date: 2008-08-15 17:20:15 -0400 (Fri, 15 Aug 2008)
New Revision: 15091
Added:
core/trunk/core/src/main/java/org/hibernate/UnknownProfileException.java
core/trunk/core/src/main/java/org/hibernate/engine/LoadQueryInfluencers.java
core/trunk/core/src/main/java/org/hibernate/engine/profile/
core/trunk/core/src/main/java/org/hibernate/engine/profile/Association.java
core/trunk/core/src/main/java/org/hibernate/engine/profile/Fetch.java
core/trunk/core/src/main/java/org/hibernate/engine/profile/FetchProfile.java
core/trunk/core/src/main/java/org/hibernate/mapping/FetchProfile.java
core/trunk/testsuite/src/test/java/org/hibernate/test/fetchprofiles/
core/trunk/testsuite/src/test/java/org/hibernate/test/fetchprofiles/basic/
core/trunk/testsuite/src/test/java/org/hibernate/test/fetchprofiles/basic/BasicFetchProfileTest.java
core/trunk/testsuite/src/test/java/org/hibernate/test/fetchprofiles/basic/Course.java
core/trunk/testsuite/src/test/java/org/hibernate/test/fetchprofiles/basic/CourseOffering.java
core/trunk/testsuite/src/test/java/org/hibernate/test/fetchprofiles/basic/Department.java
core/trunk/testsuite/src/test/java/org/hibernate/test/fetchprofiles/basic/Enrollment.java
core/trunk/testsuite/src/test/java/org/hibernate/test/fetchprofiles/basic/Mappings.hbm.xml
core/trunk/testsuite/src/test/java/org/hibernate/test/fetchprofiles/basic/Student.java
Modified:
core/trunk/core/src/main/java/org/hibernate/Session.java
core/trunk/core/src/main/java/org/hibernate/SessionFactory.java
core/trunk/core/src/main/java/org/hibernate/cfg/Configuration.java
core/trunk/core/src/main/java/org/hibernate/cfg/HbmBinder.java
core/trunk/core/src/main/java/org/hibernate/cfg/Mappings.java
core/trunk/core/src/main/java/org/hibernate/criterion/SubqueryExpression.java
core/trunk/core/src/main/java/org/hibernate/engine/SessionFactoryImplementor.java
core/trunk/core/src/main/java/org/hibernate/engine/SessionImplementor.java
core/trunk/core/src/main/java/org/hibernate/impl/SessionFactoryImpl.java
core/trunk/core/src/main/java/org/hibernate/impl/SessionImpl.java
core/trunk/core/src/main/java/org/hibernate/impl/StatelessSessionImpl.java
core/trunk/core/src/main/java/org/hibernate/loader/AbstractEntityJoinWalker.java
core/trunk/core/src/main/java/org/hibernate/loader/JoinWalker.java
core/trunk/core/src/main/java/org/hibernate/loader/OuterJoinLoader.java
core/trunk/core/src/main/java/org/hibernate/loader/OuterJoinableAssociation.java
core/trunk/core/src/main/java/org/hibernate/loader/collection/BasicCollectionJoinWalker.java
core/trunk/core/src/main/java/org/hibernate/loader/collection/BasicCollectionLoader.java
core/trunk/core/src/main/java/org/hibernate/loader/collection/BatchingCollectionInitializer.java
core/trunk/core/src/main/java/org/hibernate/loader/collection/CollectionJoinWalker.java
core/trunk/core/src/main/java/org/hibernate/loader/collection/CollectionLoader.java
core/trunk/core/src/main/java/org/hibernate/loader/collection/OneToManyJoinWalker.java
core/trunk/core/src/main/java/org/hibernate/loader/collection/OneToManyLoader.java
core/trunk/core/src/main/java/org/hibernate/loader/collection/SubselectCollectionLoader.java
core/trunk/core/src/main/java/org/hibernate/loader/collection/SubselectOneToManyLoader.java
core/trunk/core/src/main/java/org/hibernate/loader/criteria/CriteriaJoinWalker.java
core/trunk/core/src/main/java/org/hibernate/loader/criteria/CriteriaLoader.java
core/trunk/core/src/main/java/org/hibernate/loader/entity/AbstractEntityLoader.java
core/trunk/core/src/main/java/org/hibernate/loader/entity/BatchingEntityLoader.java
core/trunk/core/src/main/java/org/hibernate/loader/entity/CascadeEntityJoinWalker.java
core/trunk/core/src/main/java/org/hibernate/loader/entity/CascadeEntityLoader.java
core/trunk/core/src/main/java/org/hibernate/loader/entity/CollectionElementLoader.java
core/trunk/core/src/main/java/org/hibernate/loader/entity/EntityJoinWalker.java
core/trunk/core/src/main/java/org/hibernate/loader/entity/EntityLoader.java
core/trunk/core/src/main/java/org/hibernate/persister/collection/AbstractCollectionPersister.java
core/trunk/core/src/main/java/org/hibernate/persister/collection/BasicCollectionPersister.java
core/trunk/core/src/main/java/org/hibernate/persister/collection/OneToManyPersister.java
core/trunk/core/src/main/java/org/hibernate/persister/entity/AbstractEntityPersister.java
core/trunk/core/src/main/java/org/hibernate/persister/entity/Loadable.java
core/trunk/core/src/main/resources/org/hibernate/hibernate-mapping-3.0.dtd
core/trunk/jmx/src/main/java/org/hibernate/jmx/SessionFactoryStub.java
core/trunk/testsuite/src/test/resources/hibernate.properties
Log:
HHH-3414 : fetch profiles, phase 1 : join fetching
Modified: core/trunk/core/src/main/java/org/hibernate/Session.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/Session.java 2008-08-15 21:03:38 UTC (rev 15090)
+++ core/trunk/core/src/main/java/org/hibernate/Session.java 2008-08-15 21:20:15 UTC (rev 15091)
@@ -813,4 +813,40 @@
* @see #disconnect()
*/
void reconnect(Connection connection) throws HibernateException;
+
+ /**
+ * Is a particular fetch profile enabled on this session?
+ *
+ * @param name The name of the profile to be checked.
+ * @return True if fetch profile is enabled; false if not.
+ * @throws UnknownProfileException Indicates that the given name does not
+ * match any known profile names
+ *
+ * @see org.hibernate.engine.profile.FetchProfile for discussion of this feature
+ */
+ public boolean isFetchProfileEnabled(String name) throws UnknownProfileException;
+
+ /**
+ * Enable a particular fetch profile on this session. No-op if requested
+ * profile is already enabled.
+ *
+ * @param name The name of the fetch profile to be enabled.
+ * @throws UnknownProfileException Indicates that the given name does not
+ * match any known profile names
+ *
+ * @see org.hibernate.engine.profile.FetchProfile for discussion of this feature
+ */
+ public void enableFetchProfile(String name) throws UnknownProfileException;
+
+ /**
+ * Disable a particular fetch profile on this session. No-op if requested
+ * profile is already disabled.
+ *
+ * @param name The name of the fetch profile to be disabled.
+ * @throws UnknownProfileException Indicates that the given name does not
+ * match any known profile names
+ *
+ * @see org.hibernate.engine.profile.FetchProfile for discussion of this feature
+ */
+ public void disableFetchProfile(String name) throws UnknownProfileException;
}
Modified: core/trunk/core/src/main/java/org/hibernate/SessionFactory.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/SessionFactory.java 2008-08-15 21:03:38 UTC (rev 15090)
+++ core/trunk/core/src/main/java/org/hibernate/SessionFactory.java 2008-08-15 21:20:15 UTC (rev 15091)
@@ -244,4 +244,13 @@
* @throws HibernateException If no filter defined with the given name.
*/
public FilterDefinition getFilterDefinition(String filterName) throws HibernateException;
+
+ /**
+ * Determine if this session factory contains a fetch profile definition
+ * registered under the given name.
+ *
+ * @param name The name to check
+ * @return True if there is such a fetch profile; false otherwise.
+ */
+ public boolean containsFetchProfileDefition(String name);
}
Added: core/trunk/core/src/main/java/org/hibernate/UnknownProfileException.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/UnknownProfileException.java (rev 0)
+++ core/trunk/core/src/main/java/org/hibernate/UnknownProfileException.java 2008-08-15 21:20:15 UTC (rev 15091)
@@ -0,0 +1,48 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
+ * indicated by the @author tags or express copyright attribution
+ * statements applied by the authors. All third-party contributions are
+ * distributed under license by Red Hat Middleware LLC.
+ *
+ * This copyrighted material is made available to anyone wishing to use, modify,
+ * copy, or redistribute it subject to the terms and conditions of the GNU
+ * Lesser General Public License, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this distribution; if not, write to:
+ * Free Software Foundation, Inc.
+ * 51 Franklin Street, Fifth Floor
+ * Boston, MA 02110-1301 USA
+ *
+ */
+package org.hibernate;
+
+/**
+ * Used to indicate a request against an unknown profile name.
+ *
+ * @author Steve Ebersole
+ */
+public class UnknownProfileException extends HibernateException {
+ private final String name;
+
+ public UnknownProfileException(String name) {
+ super( "Unknow fetch profile [" + name + "]" );
+ this.name = name;
+ }
+
+ /**
+ * The unknown fetch profile name.
+ *
+ * @return The unknown fetch profile name.
+ */
+ public String getName() {
+ return name;
+ }
+}
Modified: core/trunk/core/src/main/java/org/hibernate/cfg/Configuration.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/cfg/Configuration.java 2008-08-15 21:03:38 UTC (rev 15090)
+++ core/trunk/core/src/main/java/org/hibernate/cfg/Configuration.java 2008-08-15 21:20:15 UTC (rev 15091)
@@ -114,6 +114,7 @@
import org.hibernate.mapping.SimpleValue;
import org.hibernate.mapping.Table;
import org.hibernate.mapping.UniqueKey;
+import org.hibernate.mapping.FetchProfile;
import org.hibernate.proxy.EntityNotFoundDelegate;
import org.hibernate.secure.JACCConfiguration;
import org.hibernate.tool.hbm2ddl.DatabaseMetadata;
@@ -163,6 +164,7 @@
*/
protected Map sqlResultSetMappings;
protected Map filterDefinitions;
+ protected Map fetchProfiles;
protected List secondPasses;
protected List propertyReferences;
// protected List extendsQueue;
@@ -202,6 +204,7 @@
entityResolver = XMLHelper.DEFAULT_DTD_RESOLVER;
eventListeners = new EventListeners();
filterDefinitions = new HashMap();
+ fetchProfiles = new HashMap();
// extendsQueue = new ArrayList();
extendsQueue = new HashMap();
auxiliaryDatabaseObjects = new ArrayList();
@@ -720,6 +723,7 @@
namingStrategy,
typeDefs,
filterDefinitions,
+ fetchProfiles,
extendsQueue,
auxiliaryDatabaseObjects,
tableNameBinding,
@@ -2181,6 +2185,14 @@
filterDefinitions.put( definition.getFilterName(), definition );
}
+ public Map getFetchProfiles() {
+ return fetchProfiles;
+ }
+
+ public void addFetchProfile(FetchProfile fetchProfile) {
+ fetchProfiles.put( fetchProfile.getName(), fetchProfile );
+ }
+
public void addAuxiliaryDatabaseObject(AuxiliaryDatabaseObject object) {
auxiliaryDatabaseObjects.add( object );
}
Modified: core/trunk/core/src/main/java/org/hibernate/cfg/HbmBinder.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/cfg/HbmBinder.java 2008-08-15 21:03:38 UTC (rev 15090)
+++ core/trunk/core/src/main/java/org/hibernate/cfg/HbmBinder.java 2008-08-15 21:20:15 UTC (rev 15091)
@@ -89,6 +89,7 @@
import org.hibernate.mapping.UnionSubclass;
import org.hibernate.mapping.UniqueKey;
import org.hibernate.mapping.Value;
+import org.hibernate.mapping.FetchProfile;
import org.hibernate.persister.entity.JoinedSubclassEntityPersister;
import org.hibernate.persister.entity.SingleTableEntityPersister;
import org.hibernate.persister.entity.UnionSubclassEntityPersister;
@@ -158,6 +159,9 @@
if ( "filter-def".equals( elementName ) ) {
parseFilterDef( element, mappings );
}
+ else if ( "fetch-profile".equals( elementName ) ) {
+ parseFetchProfile( element, mappings, null );
+ }
else if ( "typedef".equals( elementName ) ) {
bindTypeDef( element, mappings );
}
@@ -546,8 +550,13 @@
bindDom4jRepresentation( node, persistentClass, mappings, inheritedMetas );
bindMapRepresentation( node, persistentClass, mappings, inheritedMetas );
+ Iterator itr = node.elementIterator( "fetch-profile" );
+ while ( itr.hasNext() ) {
+ final Element profileElement = ( Element ) itr.next();
+ parseFetchProfile( profileElement, mappings, entityName );
+ }
+
bindPersistentClassCommonValues( node, persistentClass, mappings, inheritedMetas );
-
}
private static void bindPojoRepresentation(Element node, PersistentClass entity,
@@ -2963,6 +2972,25 @@
filterable.addFilter( name, condition );
}
+ private static void parseFetchProfile(Element element, Mappings mappings, String containingEntityName) {
+ String profileName = element.attributeValue( "name" );
+ FetchProfile profile = mappings.findOrCreateFetchProfile( profileName );
+ Iterator itr = element.elementIterator( "fetch" );
+ while ( itr.hasNext() ) {
+ final Element fetchElement = ( Element ) itr.next();
+ final String association = fetchElement.attributeValue( "association" );
+ final String style = fetchElement.attributeValue( "style" );
+ String entityName = fetchElement.attributeValue( "entity" );
+ if ( entityName == null ) {
+ entityName = containingEntityName;
+ }
+ if ( entityName == null ) {
+ throw new MappingException( "could not determine entity for fetch-profile fetch [" + profileName + "]:[" + association + "]" );
+ }
+ profile.addFetch( entityName, association, style );
+ }
+ }
+
private static String getSubselect(Element element) {
String subselect = element.attributeValue( "subselect" );
if ( subselect != null ) {
Modified: core/trunk/core/src/main/java/org/hibernate/cfg/Mappings.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/cfg/Mappings.java 2008-08-15 21:03:38 UTC (rev 15090)
+++ core/trunk/core/src/main/java/org/hibernate/cfg/Mappings.java 2008-08-15 21:20:15 UTC (rev 15091)
@@ -46,6 +46,7 @@
import org.hibernate.mapping.TypeDef;
import org.hibernate.mapping.AuxiliaryDatabaseObject;
import org.hibernate.mapping.Column;
+import org.hibernate.mapping.FetchProfile;
import org.hibernate.util.StringHelper;
/**
@@ -77,6 +78,7 @@
protected final List propertyReferences;
protected final NamingStrategy namingStrategy;
protected final Map filterDefinitions;
+ protected final Map fetchProfiles;
protected final List auxiliaryDatabaseObjects;
protected final Map extendsQueue;
@@ -111,12 +113,12 @@
final NamingStrategy namingStrategy,
final Map typeDefs,
final Map filterDefinitions,
+ final Map fetchProfiles,
// final List extendsQueue,
final Map extendsQueue,
final List auxiliaryDatabaseObjects,
final Map tableNamebinding,
- final Map columnNameBindingPerTable
- ) {
+ final Map columnNameBindingPerTable) {
this.classes = classes;
this.collections = collections;
this.queries = queries;
@@ -129,6 +131,7 @@
this.namingStrategy = namingStrategy;
this.typeDefs = typeDefs;
this.filterDefinitions = filterDefinitions;
+ this.fetchProfiles = fetchProfiles;
this.extendsQueue = extendsQueue;
this.auxiliaryDatabaseObjects = auxiliaryDatabaseObjects;
this.tableNameBinding = tableNamebinding;
@@ -418,7 +421,20 @@
public FilterDefinition getFilterDefinition(String name) {
return (FilterDefinition) filterDefinitions.get(name);
}
-
+
+ public Map getFetchProfiles() {
+ return fetchProfiles;
+ }
+
+ public FetchProfile findOrCreateFetchProfile(String name) {
+ FetchProfile profile = ( FetchProfile ) fetchProfiles.get( name );
+ if ( profile == null ) {
+ profile = new FetchProfile( name );
+ fetchProfiles.put( name, profile );
+ }
+ return profile;
+ }
+
public boolean isDefaultLazy() {
return defaultLazy;
}
Modified: core/trunk/core/src/main/java/org/hibernate/criterion/SubqueryExpression.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/criterion/SubqueryExpression.java 2008-08-15 21:03:38 UTC (rev 15090)
+++ core/trunk/core/src/main/java/org/hibernate/criterion/SubqueryExpression.java 2008-08-15 21:20:15 UTC (rev 15091)
@@ -32,6 +32,7 @@
import org.hibernate.engine.QueryParameters;
import org.hibernate.engine.SessionFactoryImplementor;
import org.hibernate.engine.TypedValue;
+import org.hibernate.engine.LoadQueryInfluencers;
import org.hibernate.impl.CriteriaImpl;
import org.hibernate.loader.criteria.CriteriaJoinWalker;
import org.hibernate.loader.criteria.CriteriaQueryTranslator;
@@ -76,8 +77,9 @@
factory,
criteriaImpl,
criteriaImpl.getEntityOrClassName(),
- new HashMap(),
- innerQuery.getRootSQLALias());
+ LoadQueryInfluencers.NONE,
+ innerQuery.getRootSQLALias()
+ );
String sql = walker.getSQLString();
Added: core/trunk/core/src/main/java/org/hibernate/engine/LoadQueryInfluencers.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/engine/LoadQueryInfluencers.java (rev 0)
+++ core/trunk/core/src/main/java/org/hibernate/engine/LoadQueryInfluencers.java 2008-08-15 21:20:15 UTC (rev 15091)
@@ -0,0 +1,192 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
+ * indicated by the @author tags or express copyright attribution
+ * statements applied by the authors. All third-party contributions are
+ * distributed under license by Red Hat Middleware LLC.
+ *
+ * This copyrighted material is made available to anyone wishing to use, modify,
+ * copy, or redistribute it subject to the terms and conditions of the GNU
+ * Lesser General Public License, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this distribution; if not, write to:
+ * Free Software Foundation, Inc.
+ * 51 Franklin Street, Fifth Floor
+ * Boston, MA 02110-1301 USA
+ *
+ */
+package org.hibernate.engine;
+
+import java.util.Map;
+import java.util.Set;
+import java.util.Iterator;
+import java.util.HashMap;
+import java.util.HashSet;
+
+import org.hibernate.Filter;
+import org.hibernate.UnknownProfileException;
+import org.hibernate.type.Type;
+import org.hibernate.impl.FilterImpl;
+
+/**
+ * Centralize all options which can influence the SQL query needed to load and
+ * entity. Currently such influencers are defined as:<ul>
+ * <li>filters</li>
+ * <li>fetch profiles</li>
+ * <li>internal fetch profile (merge profile, etc)</li>
+ * </ul>
+ *
+ * @author Steve Ebersole
+ */
+public class LoadQueryInfluencers {
+ /**
+ * Static reference useful for cases where we are creating load SQL
+ * outside the context of any influencers. One such example is
+ * anything created by the session factory.
+ */
+ public static LoadQueryInfluencers NONE = new LoadQueryInfluencers();
+
+ private final SessionFactoryImplementor sessionFactory;
+ private String internalFetchProfile;
+ private Map enabledFilters;
+ private Set enabledFetchProfileNames;
+
+ public LoadQueryInfluencers() {
+ this( null, java.util.Collections.EMPTY_MAP, java.util.Collections.EMPTY_SET );
+ }
+
+ public LoadQueryInfluencers(SessionFactoryImplementor sessionFactory) {
+ this( sessionFactory, new HashMap(), new HashSet() );
+ }
+
+ private LoadQueryInfluencers(SessionFactoryImplementor sessionFactory, Map enabledFilters, Set enabledFetchProfileNames) {
+ this.sessionFactory = sessionFactory;
+ this.enabledFilters = enabledFilters;
+ this.enabledFetchProfileNames = enabledFetchProfileNames;
+ }
+
+ public SessionFactoryImplementor getSessionFactory() {
+ return sessionFactory;
+ }
+
+
+ // internal fetch profile support ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ public String getInternalFetchProfile() {
+ return internalFetchProfile;
+ }
+
+ public void setInternalFetchProfile(String internalFetchProfile) {
+ if ( sessionFactory == null ) {
+ // thats the signal that this is the immutable, context-less
+ // variety
+ throw new IllegalStateException( "Cannot modify context-less LoadQueryInfluencers" );
+ }
+ this.internalFetchProfile = internalFetchProfile;
+ }
+
+
+ // filter support ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ public boolean hasEnabledFilters() {
+ return enabledFilters != null && !enabledFilters.isEmpty();
+ }
+
+ public Map getEnabledFilters() {
+ // First, validate all the enabled filters...
+ //TODO: this implementation has bad performance
+ Iterator itr = enabledFilters.values().iterator();
+ while ( itr.hasNext() ) {
+ final Filter filter = ( Filter ) itr.next();
+ filter.validate();
+ }
+ return enabledFilters;
+ }
+
+ public Filter getEnabledFilter(String filterName) {
+ return ( Filter ) enabledFilters.get( filterName );
+ }
+
+ public Filter enableFilter(String filterName) {
+ FilterImpl filter = new FilterImpl( sessionFactory.getFilterDefinition( filterName ) );
+ enabledFilters.put( filterName, filter );
+ return filter;
+ }
+
+ public void disableFilter(String filterName) {
+ enabledFilters.remove( filterName );
+ }
+
+ public Object getFilterParameterValue(String filterParameterName) {
+ String[] parsed = parseFilterParameterName( filterParameterName );
+ FilterImpl filter = ( FilterImpl ) enabledFilters.get( parsed[0] );
+ if ( filter == null ) {
+ throw new IllegalArgumentException( "Filter [" + parsed[0] + "] currently not enabled" );
+ }
+ return filter.getParameter( parsed[1] );
+ }
+
+ public Type getFilterParameterType(String filterParameterName) {
+ String[] parsed = parseFilterParameterName( filterParameterName );
+ FilterDefinition filterDef = sessionFactory.getFilterDefinition( parsed[0] );
+ if ( filterDef == null ) {
+ throw new IllegalArgumentException( "Filter [" + parsed[0] + "] not defined" );
+ }
+ Type type = filterDef.getParameterType( parsed[1] );
+ if ( type == null ) {
+ // this is an internal error of some sort...
+ throw new InternalError( "Unable to locate type for filter parameter" );
+ }
+ return type;
+ }
+
+ public static String[] parseFilterParameterName(String filterParameterName) {
+ int dot = filterParameterName.indexOf( '.' );
+ if ( dot <= 0 ) {
+ throw new IllegalArgumentException( "Invalid filter-parameter name format" );
+ }
+ String filterName = filterParameterName.substring( 0, dot );
+ String parameterName = filterParameterName.substring( dot + 1 );
+ return new String[] { filterName, parameterName };
+ }
+
+
+ // fetch profile support ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ public boolean hasEnabledFetchProfiles() {
+ return enabledFetchProfileNames != null && !enabledFetchProfileNames.isEmpty();
+ }
+
+ public Set getEnabledFetchProfileNames() {
+ return enabledFetchProfileNames;
+ }
+
+ private void checkFetchProfileName(String name) {
+ if ( !sessionFactory.containsFetchProfileDefition( name ) ) {
+ throw new UnknownProfileException( name );
+ }
+ }
+
+ public boolean isFetchProfileEnabled(String name) throws UnknownProfileException {
+ checkFetchProfileName( name );
+ return enabledFetchProfileNames.contains( name );
+ }
+
+ public void enableFetchProfile(String name) throws UnknownProfileException {
+ checkFetchProfileName( name );
+ enabledFetchProfileNames.add( name );
+ }
+
+ public void disableFetchProfile(String name) throws UnknownProfileException {
+ checkFetchProfileName( name );
+ enabledFetchProfileNames.remove( name );
+ }
+
+}
Modified: core/trunk/core/src/main/java/org/hibernate/engine/SessionFactoryImplementor.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/engine/SessionFactoryImplementor.java 2008-08-15 21:03:38 UTC (rev 15090)
+++ core/trunk/core/src/main/java/org/hibernate/engine/SessionFactoryImplementor.java 2008-08-15 21:20:15 UTC (rev 15091)
@@ -37,6 +37,7 @@
import org.hibernate.ConnectionReleaseMode;
import org.hibernate.proxy.EntityNotFoundDelegate;
import org.hibernate.engine.query.QueryPlanCache;
+import org.hibernate.engine.profile.FetchProfile;
import org.hibernate.persister.collection.CollectionPersister;
import org.hibernate.persister.entity.EntityPersister;
import org.hibernate.cache.QueryCache;
@@ -219,5 +220,13 @@
public EntityNotFoundDelegate getEntityNotFoundDelegate();
public SQLFunctionRegistry getSqlFunctionRegistry();
-
+
+ /**
+ * Retrieve fetch profile by name.
+ *
+ * @param name The name of the profile to retrieve.
+ * @return The profile definition
+ */
+ public FetchProfile getFetchProfile(String name);
+
}
Modified: core/trunk/core/src/main/java/org/hibernate/engine/SessionImplementor.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/engine/SessionImplementor.java 2008-08-15 21:03:38 UTC (rev 15090)
+++ core/trunk/core/src/main/java/org/hibernate/engine/SessionImplementor.java 2008-08-15 21:20:15 UTC (rev 15091)
@@ -29,6 +29,7 @@
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import org.hibernate.CacheMode;
import org.hibernate.EntityMode;
@@ -237,6 +238,7 @@
* @param filterParameterName The filter parameter name in the format
* {FILTER_NAME.PARAMETER_NAME}.
* @return The filter parameter value.
+ * @deprecated use #getLoadQueryInfluencers instead
*/
public Object getFilterParameterValue(String filterParameterName);
@@ -245,6 +247,8 @@
*
* @param filterParameterName The filter parameter name in the format
* {FILTER_NAME.PARAMETER_NAME}.
+ * @return The filter param type
+ * @deprecated use #getLoadQueryInfluencers instead
*/
public Type getFilterParameterType(String filterParameterName);
@@ -253,6 +257,7 @@
* name, with values corresponding to the {@link org.hibernate.impl.FilterImpl}
* instance.
* @return The currently enabled filters.
+ * @deprecated use #getLoadQueryInfluencers instead
*/
public Map getEnabledFilters();
@@ -307,10 +312,22 @@
public void afterScrollOperation();
+ /**
+ * Get the <i>internal</i> fetch profile currently associated with this session.
+ *
+ * @return The current internal fetch profile, or null if none currently associated.
+ * @deprecated use #getLoadQueryInfluencers instead
+ */
+ public String getFetchProfile();
+
+ /**
+ * Set the current <i>internal</i> fetch profile for this session.
+ *
+ * @param name The internal fetch profile name to use
+ * @deprecated use #getLoadQueryInfluencers instead
+ */
public void setFetchProfile(String name);
- public String getFetchProfile();
-
public JDBCContext getJDBCContext();
/**
@@ -322,4 +339,12 @@
* @return True if the session is closed; false otherwise.
*/
public boolean isClosed();
+
+ /**
+ * Get the load query influencers associated with this session.
+ *
+ * @return the load query influencers associated with this session;
+ * should never be null.
+ */
+ public LoadQueryInfluencers getLoadQueryInfluencers();
}
Added: core/trunk/core/src/main/java/org/hibernate/engine/profile/Association.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/engine/profile/Association.java (rev 0)
+++ core/trunk/core/src/main/java/org/hibernate/engine/profile/Association.java 2008-08-15 21:20:15 UTC (rev 15091)
@@ -0,0 +1,56 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
+ * indicated by the @author tags or express copyright attribution
+ * statements applied by the authors. All third-party contributions are
+ * distributed under license by Red Hat Middleware LLC.
+ *
+ * This copyrighted material is made available to anyone wishing to use, modify,
+ * copy, or redistribute it subject to the terms and conditions of the GNU
+ * Lesser General Public License, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this distribution; if not, write to:
+ * Free Software Foundation, Inc.
+ * 51 Franklin Street, Fifth Floor
+ * Boston, MA 02110-1301 USA
+ *
+ */
+package org.hibernate.engine.profile;
+
+import org.hibernate.persister.entity.EntityPersister;
+
+/**
+ * Models the association of a given fetch.
+ *
+ * @author Steve Ebersole
+ */
+public class Association {
+ private final EntityPersister owner;
+ private final String associationPath;
+ private final String role;
+
+ public Association(EntityPersister owner, String associationPath) {
+ this.owner = owner;
+ this.associationPath = associationPath;
+ this.role = owner.getEntityName() + '.' + associationPath;
+ }
+
+ public EntityPersister getOwner() {
+ return owner;
+ }
+
+ public String getAssociationPath() {
+ return associationPath;
+ }
+
+ public String getRole() {
+ return role;
+ }
+}
Added: core/trunk/core/src/main/java/org/hibernate/engine/profile/Fetch.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/engine/profile/Fetch.java (rev 0)
+++ core/trunk/core/src/main/java/org/hibernate/engine/profile/Fetch.java 2008-08-15 21:20:15 UTC (rev 15091)
@@ -0,0 +1,84 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
+ * indicated by the @author tags or express copyright attribution
+ * statements applied by the authors. All third-party contributions are
+ * distributed under license by Red Hat Middleware LLC.
+ *
+ * This copyrighted material is made available to anyone wishing to use, modify,
+ * copy, or redistribute it subject to the terms and conditions of the GNU
+ * Lesser General Public License, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this distribution; if not, write to:
+ * Free Software Foundation, Inc.
+ * 51 Franklin Street, Fifth Floor
+ * Boston, MA 02110-1301 USA
+ *
+ */
+package org.hibernate.engine.profile;
+
+/**
+ * Models an individual fetch within a profile.
+ *
+ * @author Steve Ebersole
+ */
+public class Fetch {
+ private final Association association;
+ private final Style style;
+
+ public Fetch(Association association, Style style) {
+ this.association = association;
+ this.style = style;
+ }
+
+ public Association getAssociation() {
+ return association;
+ }
+
+ public Style getStyle() {
+ return style;
+ }
+
+ /**
+ * The type or style of fetch. For the moment we limit this to
+ * join and select, though technically subselect would be valid
+ * here as as well; however, to support subselect here would
+ * require major changes to the subselect loading code (which is
+ * needed for other things as well anyway).
+ */
+ public static class Style {
+ public static final Style JOIN = new Style( "join" );
+ public static final Style SELECT = new Style( "select" );
+
+ private final String name;
+
+ private Style(String name) {
+ this.name = name;
+ }
+
+ public String toString() {
+ return name;
+ }
+
+ public static Style parse(String name) {
+ if ( SELECT.name.equals( name ) ) {
+ return SELECT;
+ }
+ else {
+ // the default...
+ return JOIN;
+ }
+ }
+ }
+
+ public String toString() {
+ return "Fetch[" + style + "{" + association.getRole() + "}]";
+ }
+}
Added: core/trunk/core/src/main/java/org/hibernate/engine/profile/FetchProfile.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/engine/profile/FetchProfile.java (rev 0)
+++ core/trunk/core/src/main/java/org/hibernate/engine/profile/FetchProfile.java 2008-08-15 21:20:15 UTC (rev 15091)
@@ -0,0 +1,169 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
+ * indicated by the @author tags or express copyright attribution
+ * statements applied by the authors. All third-party contributions are
+ * distributed under license by Red Hat Middleware LLC.
+ *
+ * This copyrighted material is made available to anyone wishing to use, modify,
+ * copy, or redistribute it subject to the terms and conditions of the GNU
+ * Lesser General Public License, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this distribution; if not, write to:
+ * Free Software Foundation, Inc.
+ * 51 Franklin Street, Fifth Floor
+ * Boston, MA 02110-1301 USA
+ *
+ */
+package org.hibernate.engine.profile;
+
+import java.util.Map;
+import java.util.HashMap;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.hibernate.engine.SessionFactoryImplementor;
+import org.hibernate.type.Type;
+import org.hibernate.type.BagType;
+import org.hibernate.type.AssociationType;
+
+/**
+ * A 'fetch profile' allows a user to dynamically modify the fetching
+ * strategy used for particular associations at runtime, whereas that
+ * information was historically only statically defined in the metadata.
+ *
+ * @author Steve Ebersole
+ */
+public class FetchProfile {
+ private static final Logger log = LoggerFactory.getLogger( FetchProfile.class );
+
+ private final String name;
+ private Map fetches = new HashMap();
+
+ private boolean containsJoinFetchedCollection = false;
+ private boolean containsJoinFetchedBag = false;
+ private Fetch bagJoinFetch;
+
+ /**
+ * A 'fetch profile' is uniquely named within a
+ * {@link SessionFactoryImplementor SessionFactory}, thus it is also
+ * uniquely and easily identifiable within that
+ * {@link SessionFactoryImplementor SessionFactory}.
+ *
+ * @param name The name under which we are bound in the sessionFactory
+ */
+ public FetchProfile(String name) {
+ this.name = name;
+ }
+
+ /**
+ * Add a fetch to the profile.
+ *
+ * @param association The association to be fetched
+ * @param fetchStyleName The name of the fetch style to apply
+ */
+ public void addFetch(Association association, String fetchStyleName) {
+ addFetch( association, Fetch.Style.parse( fetchStyleName ) );
+ }
+
+ /**
+ * Add a fetch to the profile.
+ *
+ * @param association The association to be fetched
+ * @param style The style to apply
+ */
+ public void addFetch(Association association, Fetch.Style style) {
+ addFetch( new Fetch( association, style ) );
+ }
+
+ /**
+ * Add a fetch to the profile.
+ *
+ * @param fetch The fetch to add.
+ */
+ public void addFetch(Fetch fetch) {
+ Type associationType = fetch.getAssociation().getOwner().getPropertyType( fetch.getAssociation().getAssociationPath() );
+ if ( associationType.isCollectionType() ) {
+ log.trace( "handling request to add collection fetch [{}]", fetch.getAssociation().getRole() );
+
+ // couple of things for whcih to account in the case of collection
+ // join fetches
+ if ( Fetch.Style.JOIN == fetch.getStyle() ) {
+ // first, if this is a bag we need to ignore it if we previously
+ // processed collection join fetches
+ if ( BagType.class.isInstance( associationType ) ) {
+ if ( containsJoinFetchedCollection ) {
+ log.warn( "Ignoring bag join fetch [{}] due to prior collection join fetch", fetch.getAssociation().getRole() );
+ return; // EARLY EXIT!!!
+ }
+ }
+
+ // also, in cases where we are asked to add a collection join
+ // fetch where we had already added a bag join fetch previously,
+ // we need to go back and ignore that previous bag join fetch.
+ if ( containsJoinFetchedBag ) {
+ if ( fetches.remove( bagJoinFetch.getAssociation().getRole() ) != bagJoinFetch ) {
+ // just for safety...
+ log.warn( "Unable to erase previously added bag join fetch" );
+ }
+ bagJoinFetch = null;
+ containsJoinFetchedBag = false;
+ }
+
+ containsJoinFetchedCollection = true;
+ }
+ }
+ fetches.put( fetch.getAssociation().getRole(), fetch );
+ }
+
+ /**
+ * Getter for property 'name'.
+ *
+ * @return Value for property 'name'.
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * Getter for property 'fetches'. Map of {@link Fetch} instances,
+ * keyed by associaion <tt>role</tt>
+ *
+ * @return Value for property 'fetches'.
+ */
+ public Map getFetches() {
+ return fetches;
+ }
+
+ public Fetch getFetchByRole(String role) {
+ return ( Fetch ) fetches.get( role );
+ }
+
+ /**
+ * Getter for property 'containsJoinFetchedCollection', which flags whether
+ * this fetch profile contained any collection join fetches.
+ *
+ * @return Value for property 'containsJoinFetchedCollection'.
+ */
+ public boolean isContainsJoinFetchedCollection() {
+ return containsJoinFetchedCollection;
+ }
+
+ /**
+ * Getter for property 'containsJoinFetchedBag', which flags whether this
+ * fetch profile contained any bag join fetches
+ *
+ * @return Value for property 'containsJoinFetchedBag'.
+ */
+ public boolean isContainsJoinFetchedBag() {
+ return containsJoinFetchedBag;
+ }
+}
Modified: core/trunk/core/src/main/java/org/hibernate/impl/SessionFactoryImpl.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/impl/SessionFactoryImpl.java 2008-08-15 21:03:38 UTC (rev 15090)
+++ core/trunk/core/src/main/java/org/hibernate/impl/SessionFactoryImpl.java 2008-08-15 21:20:15 UTC (rev 15091)
@@ -84,6 +84,9 @@
import org.hibernate.engine.NamedSQLQueryDefinition;
import org.hibernate.engine.ResultSetMappingDefinition;
import org.hibernate.engine.SessionFactoryImplementor;
+import org.hibernate.engine.profile.FetchProfile;
+import org.hibernate.engine.profile.Fetch;
+import org.hibernate.engine.profile.Association;
import org.hibernate.engine.query.QueryPlanCache;
import org.hibernate.engine.query.sql.NativeSQLQuerySpecification;
import org.hibernate.event.EventListeners;
@@ -100,6 +103,7 @@
import org.hibernate.persister.collection.CollectionPersister;
import org.hibernate.persister.entity.EntityPersister;
import org.hibernate.persister.entity.Queryable;
+import org.hibernate.persister.entity.Loadable;
import org.hibernate.pretty.MessageHelper;
import org.hibernate.proxy.EntityNotFoundDelegate;
import org.hibernate.stat.Statistics;
@@ -156,6 +160,7 @@
private final transient Map namedSqlQueries;
private final transient Map sqlResultSetMappings;
private final transient Map filters;
+ private final transient Map fetchProfiles;
private final transient Map imports;
private final transient Interceptor interceptor;
private final transient Settings settings;
@@ -198,6 +203,7 @@
public void sessionFactoryClosed(SessionFactory factory) {
}
};
+
this.filters = new HashMap();
this.filters.putAll( cfg.getFilterDefinitions() );
@@ -412,6 +418,43 @@
}
this.entityNotFoundDelegate = entityNotFoundDelegate;
+ // this needs to happen after persisters are all ready to go...
+ this.fetchProfiles = new HashMap();
+ itr = cfg.getFetchProfiles().values().iterator();
+ while ( itr.hasNext() ) {
+ final org.hibernate.mapping.FetchProfile mappingProfile =
+ ( org.hibernate.mapping.FetchProfile ) itr.next();
+ final FetchProfile fetchProfile = new FetchProfile( mappingProfile.getName() );
+ Iterator fetches = mappingProfile.getFetches().iterator();
+ while ( fetches.hasNext() ) {
+ final org.hibernate.mapping.FetchProfile.Fetch mappingFetch =
+ ( org.hibernate.mapping.FetchProfile.Fetch ) fetches.next();
+ // resolve the persister owning the fetch
+ final String entityName = getImportedClassName( mappingFetch.getEntity() );
+ final EntityPersister owner = ( EntityPersister ) ( entityName == null ? null : entityPersisters.get( entityName ) );
+ if ( owner == null ) {
+ throw new HibernateException(
+ "Unable to resolve entity reference [" + mappingFetch.getEntity()
+ + "] in fetch profile [" + fetchProfile.getName() + "]"
+ );
+ }
+
+ // validate the specified association fetch
+ Type associationType = owner.getPropertyType( mappingFetch.getAssociation() );
+ if ( associationType == null || !associationType.isAssociationType() ) {
+ throw new HibernateException( "Fetch profile [" + fetchProfile.getName() + "] specified an invalid association" );
+ }
+
+ // resolve the style
+ final Fetch.Style fetchStyle = Fetch.Style.parse( mappingFetch.getStyle() );
+
+ // then construct the fetch instance...
+ fetchProfile.addFetch( new Association( owner, mappingFetch.getAssociation() ), fetchStyle );
+ ( ( Loadable ) owner ).registerAffectingFetchProfile( fetchProfile.getName() );
+ }
+ fetchProfiles.put( fetchProfile.getName(), fetchProfile );
+ }
+
this.observer.sessionFactoryCreated( this );
}
@@ -1004,6 +1047,10 @@
return def;
}
+ public boolean containsFetchProfileDefition(String name) {
+ return fetchProfiles.containsKey( name );
+ }
+
public Set getDefinedFilterNames() {
return filters.keySet();
}
@@ -1061,6 +1108,14 @@
return entityNotFoundDelegate;
}
+ public SQLFunctionRegistry getSqlFunctionRegistry() {
+ return sqlFunctionRegistry;
+ }
+
+ public FetchProfile getFetchProfile(String name) {
+ return ( FetchProfile ) fetchProfiles.get( name );
+ }
+
/**
* Custom serialization hook used during Session serialization.
*
@@ -1102,8 +1157,4 @@
}
return ( SessionFactoryImpl ) result;
}
-
- public SQLFunctionRegistry getSqlFunctionRegistry() {
- return sqlFunctionRegistry;
- }
}
Modified: core/trunk/core/src/main/java/org/hibernate/impl/SessionImpl.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/impl/SessionImpl.java 2008-08-15 21:03:38 UTC (rev 15090)
+++ core/trunk/core/src/main/java/org/hibernate/impl/SessionImpl.java 2008-08-15 21:20:15 UTC (rev 15091)
@@ -66,6 +66,7 @@
import org.hibernate.Transaction;
import org.hibernate.TransientObjectException;
import org.hibernate.UnresolvableObjectException;
+import org.hibernate.UnknownProfileException;
import org.hibernate.collection.PersistentCollection;
import org.hibernate.engine.ActionQueue;
import org.hibernate.engine.CollectionEntry;
@@ -76,6 +77,7 @@
import org.hibernate.engine.QueryParameters;
import org.hibernate.engine.StatefulPersistenceContext;
import org.hibernate.engine.Status;
+import org.hibernate.engine.LoadQueryInfluencers;
import org.hibernate.engine.query.FilterQueryPlan;
import org.hibernate.engine.query.HQLQueryPlan;
import org.hibernate.engine.query.NativeSQLQueryPlan;
@@ -167,10 +169,8 @@
private transient boolean flushBeforeCompletionEnabled;
private transient boolean autoCloseSessionEnabled;
private transient ConnectionReleaseMode connectionReleaseMode;
-
- private transient String fetchProfile;
- private transient Map enabledFilters = new HashMap();
+ private transient LoadQueryInfluencers loadQueryInfluencers;
private transient Session rootSession;
private transient Map childSessionsByEntityMode;
@@ -195,6 +195,8 @@
this.autoCloseSessionEnabled = false;
this.connectionReleaseMode = null;
+ loadQueryInfluencers = new LoadQueryInfluencers( factory );
+
if ( factory.getStatistics().isStatisticsEnabled() ) {
factory.getStatisticsImplementor().openSession();
}
@@ -239,6 +241,8 @@
this.connectionReleaseMode = connectionReleaseMode;
this.jdbcContext = new JDBCContext( this, connection, interceptor );
+ loadQueryInfluencers = new LoadQueryInfluencers( factory );
+
if ( factory.getStatistics().isStatisticsEnabled() ) {
factory.getStatisticsImplementor().openSession();
}
@@ -1048,76 +1052,7 @@
flush();
}
- public Filter getEnabledFilter(String filterName) {
- checkTransactionSynchStatus();
- return (Filter) enabledFilters.get(filterName);
- }
- public Filter enableFilter(String filterName) {
- errorIfClosed();
- checkTransactionSynchStatus();
- FilterImpl filter = new FilterImpl( factory.getFilterDefinition(filterName) );
- enabledFilters.put(filterName, filter);
- return filter;
- }
-
- public void disableFilter(String filterName) {
- errorIfClosed();
- checkTransactionSynchStatus();
- enabledFilters.remove(filterName);
- }
-
- public Object getFilterParameterValue(String filterParameterName) {
- errorIfClosed();
- checkTransactionSynchStatus();
- String[] parsed = parseFilterParameterName(filterParameterName);
- FilterImpl filter = (FilterImpl) enabledFilters.get( parsed[0] );
- if (filter == null) {
- throw new IllegalArgumentException("Filter [" + parsed[0] + "] currently not enabled");
- }
- return filter.getParameter( parsed[1] );
- }
-
- public Type getFilterParameterType(String filterParameterName) {
- errorIfClosed();
- checkTransactionSynchStatus();
- String[] parsed = parseFilterParameterName(filterParameterName);
- FilterDefinition filterDef = factory.getFilterDefinition( parsed[0] );
- if (filterDef == null) {
- throw new IllegalArgumentException("Filter [" + parsed[0] + "] not defined");
- }
- Type type = filterDef.getParameterType( parsed[1] );
- if (type == null) {
- // this is an internal error of some sort...
- throw new InternalError("Unable to locate type for filter parameter");
- }
- return type;
- }
-
- public Map getEnabledFilters() {
- errorIfClosed();
- checkTransactionSynchStatus();
- // First, validate all the enabled filters...
- //TODO: this implementation has bad performance
- Iterator itr = enabledFilters.values().iterator();
- while ( itr.hasNext() ) {
- final Filter filter = (Filter) itr.next();
- filter.validate();
- }
- return enabledFilters;
- }
-
- private String[] parseFilterParameterName(String filterParameterName) {
- int dot = filterParameterName.indexOf('.');
- if (dot <= 0) {
- throw new IllegalArgumentException("Invalid filter-parameter name format"); // TODO: what type?
- }
- String filterName = filterParameterName.substring(0, dot);
- String parameterName = filterParameterName.substring(dot+1);
- return new String[] {filterName, parameterName};
- }
-
-
/**
* Retrieve a list of persistent objects using a hibernate query
*/
@@ -1432,7 +1367,7 @@
return listFilter( collection, filter, new QueryParameters( new Type[]{null, type}, new Object[]{null, value} ) );
}
- public Collection filter(Object collection, String filter, Object[] values, Type[] types)
+ public Collection filter(Object collection, String filter, Object[] values, Type[] types)
throws HibernateException {
Object[] vals = new Object[values.length + 1];
Type[] typs = new Type[types.length + 1];
@@ -1491,7 +1426,7 @@
return plan;
}
- public List listFilter(Object collection, String filter, QueryParameters queryParameters)
+ public List listFilter(Object collection, String filter, QueryParameters queryParameters)
throws HibernateException {
errorIfClosed();
checkTransactionSynchStatus();
@@ -1511,7 +1446,7 @@
return results;
}
- public Iterator iterateFilter(Object collection, String filter, QueryParameters queryParameters)
+ public Iterator iterateFilter(Object collection, String filter, QueryParameters queryParameters)
throws HibernateException {
errorIfClosed();
checkTransactionSynchStatus();
@@ -1552,7 +1487,7 @@
factory,
criteria,
entityName,
- getEnabledFilters()
+ getLoadQueryInfluencers()
);
autoFlushIfRequired( loader.getQuerySpaces() );
dontFlushFromFind++;
@@ -1579,7 +1514,7 @@
factory,
criteria,
implementors[i],
- getEnabledFilters()
+ getLoadQueryInfluencers()
);
spaces.addAll( loaders[i].getQuerySpaces() );
@@ -1680,7 +1615,7 @@
);
}
- public ScrollableResults scrollCustomQuery(CustomQuery customQuery, QueryParameters queryParameters)
+ public ScrollableResults scrollCustomQuery(CustomQuery customQuery, QueryParameters queryParameters)
throws HibernateException {
errorIfClosed();
checkTransactionSynchStatus();
@@ -1734,7 +1669,7 @@
return factory;
}
- public void initializeCollection(PersistentCollection collection, boolean writing)
+ public void initializeCollection(PersistentCollection collection, boolean writing)
throws HibernateException {
errorIfClosed();
checkTransactionSynchStatus();
@@ -1882,23 +1817,107 @@
// nothing to do in a stateful session
}
- public String getFetchProfile() {
+ public JDBCContext getJDBCContext() {
+ errorIfClosed();
checkTransactionSynchStatus();
- return fetchProfile;
+ return jdbcContext;
}
- public JDBCContext getJDBCContext() {
+ public LoadQueryInfluencers getLoadQueryInfluencers() {
+ return loadQueryInfluencers;
+ }
+
+ // filter support ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ /**
+ * {@inheritDoc}
+ */
+ public Filter getEnabledFilter(String filterName) {
+ checkTransactionSynchStatus();
+ return loadQueryInfluencers.getEnabledFilter( filterName );
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public Filter enableFilter(String filterName) {
errorIfClosed();
checkTransactionSynchStatus();
- return jdbcContext;
+ return loadQueryInfluencers.enableFilter( filterName );
}
+ /**
+ * {@inheritDoc}
+ */
+ public void disableFilter(String filterName) {
+ errorIfClosed();
+ checkTransactionSynchStatus();
+ loadQueryInfluencers.disableFilter( filterName );
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public Object getFilterParameterValue(String filterParameterName) {
+ errorIfClosed();
+ checkTransactionSynchStatus();
+ return loadQueryInfluencers.getFilterParameterValue( filterParameterName );
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public Type getFilterParameterType(String filterParameterName) {
+ errorIfClosed();
+ checkTransactionSynchStatus();
+ return loadQueryInfluencers.getFilterParameterType( filterParameterName );
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public Map getEnabledFilters() {
+ errorIfClosed();
+ checkTransactionSynchStatus();
+ return loadQueryInfluencers.getEnabledFilters();
+ }
+
+
+ // internal fetch profile support ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ /**
+ * {@inheritDoc}
+ */
+ public String getFetchProfile() {
+ checkTransactionSynchStatus();
+ return loadQueryInfluencers.getInternalFetchProfile();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
public void setFetchProfile(String fetchProfile) {
errorIfClosed();
checkTransactionSynchStatus();
- this.fetchProfile = fetchProfile;
+ loadQueryInfluencers.setInternalFetchProfile( fetchProfile );
}
+
+ // fetch profile support ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ public boolean isFetchProfileEnabled(String name) throws UnknownProfileException {
+ return loadQueryInfluencers.isFetchProfileEnabled( name );
+ }
+
+ public void enableFetchProfile(String name) throws UnknownProfileException {
+ loadQueryInfluencers.enableFetchProfile( name );
+ }
+
+ public void disableFetchProfile(String name) throws UnknownProfileException {
+ loadQueryInfluencers.disableFetchProfile( name );
+ }
+
+
private void checkTransactionSynchStatus() {
if ( jdbcContext != null && !isClosed() ) {
jdbcContext.registerSynchronizationIfPossible();
@@ -1923,7 +1942,6 @@
cacheMode = CacheMode.parse( ( String ) ois.readObject() );
flushBeforeCompletionEnabled = ois.readBoolean();
autoCloseSessionEnabled = ois.readBoolean();
- fetchProfile = ( String ) ois.readObject();
interceptor = ( Interceptor ) ois.readObject();
factory = SessionFactoryImpl.deserialize( ois );
@@ -1936,12 +1954,13 @@
persistenceContext = StatefulPersistenceContext.deserialize( ois, this );
actionQueue = ActionQueue.deserialize( ois, this );
- enabledFilters = ( Map ) ois.readObject();
+ loadQueryInfluencers = ( LoadQueryInfluencers ) ois.readObject();
+
childSessionsByEntityMode = ( Map ) ois.readObject();
- Iterator iter = enabledFilters.values().iterator();
+ Iterator iter = loadQueryInfluencers.getEnabledFilters().values().iterator();
while ( iter.hasNext() ) {
- ( ( FilterImpl ) iter.next() ).afterDeserialize(factory);
+ ( ( FilterImpl ) iter.next() ).afterDeserialize( factory );
}
if ( isRootSession && childSessionsByEntityMode != null ) {
@@ -1975,7 +1994,6 @@
oos.writeObject( cacheMode.toString() );
oos.writeBoolean( flushBeforeCompletionEnabled );
oos.writeBoolean( autoCloseSessionEnabled );
- oos.writeObject( fetchProfile );
// we need to writeObject() on this since interceptor is user defined
oos.writeObject( interceptor );
@@ -1989,7 +2007,7 @@
actionQueue.serialize( oos );
// todo : look at optimizing these...
- oos.writeObject( enabledFilters );
+ oos.writeObject( loadQueryInfluencers );
oos.writeObject( childSessionsByEntityMode );
}
}
Modified: core/trunk/core/src/main/java/org/hibernate/impl/StatelessSessionImpl.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/impl/StatelessSessionImpl.java 2008-08-15 21:03:38 UTC (rev 15090)
+++ core/trunk/core/src/main/java/org/hibernate/impl/StatelessSessionImpl.java 2008-08-15 21:20:15 UTC (rev 15091)
@@ -57,6 +57,7 @@
import org.hibernate.engine.QueryParameters;
import org.hibernate.engine.StatefulPersistenceContext;
import org.hibernate.engine.Versioning;
+import org.hibernate.engine.LoadQueryInfluencers;
import org.hibernate.engine.query.HQLQueryPlan;
import org.hibernate.engine.query.NativeSQLQueryPlan;
import org.hibernate.engine.query.sql.NativeSQLQuerySpecification;
@@ -527,12 +528,12 @@
errorIfClosed();
String entityName = criteria.getEntityOrClassName();
CriteriaLoader loader = new CriteriaLoader(
- getOuterJoinLoadable(entityName),
+ getOuterJoinLoadable( entityName ),
factory,
criteria,
entityName,
- getEnabledFilters()
- );
+ getLoadQueryInfluencers()
+ );
return loader.scroll(this, scrollMode);
}
@@ -548,7 +549,7 @@
factory,
criteria,
implementors[i],
- getEnabledFilters()
+ getLoadQueryInfluencers()
);
}
@@ -623,6 +624,10 @@
return jdbcContext;
}
+ public LoadQueryInfluencers getLoadQueryInfluencers() {
+ return null;
+ }
+
public void setFetchProfile(String name) {}
public void afterTransactionBegin(Transaction tx) {}
Modified: core/trunk/core/src/main/java/org/hibernate/loader/AbstractEntityJoinWalker.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/loader/AbstractEntityJoinWalker.java 2008-08-15 21:03:38 UTC (rev 15090)
+++ core/trunk/core/src/main/java/org/hibernate/loader/AbstractEntityJoinWalker.java 2008-08-15 21:20:15 UTC (rev 15091)
@@ -26,13 +26,16 @@
import java.util.ArrayList;
import java.util.List;
-import java.util.Map;
+import java.util.Iterator;
import org.hibernate.FetchMode;
import org.hibernate.LockMode;
import org.hibernate.MappingException;
import org.hibernate.engine.CascadeStyle;
import org.hibernate.engine.SessionFactoryImplementor;
+import org.hibernate.engine.LoadQueryInfluencers;
+import org.hibernate.engine.profile.FetchProfile;
+import org.hibernate.engine.profile.Fetch;
import org.hibernate.persister.entity.Loadable;
import org.hibernate.persister.entity.OuterJoinLoadable;
import org.hibernate.sql.JoinFragment;
@@ -51,55 +54,60 @@
private final OuterJoinLoadable persister;
private final String alias;
- public AbstractEntityJoinWalker(OuterJoinLoadable persister, SessionFactoryImplementor factory, Map enabledFilters) {
- this( persister, factory, enabledFilters, null );
+ public AbstractEntityJoinWalker(
+ OuterJoinLoadable persister,
+ SessionFactoryImplementor factory,
+ LoadQueryInfluencers loadQueryInfluencers) {
+ this( persister, factory, loadQueryInfluencers, null );
}
- public AbstractEntityJoinWalker(OuterJoinLoadable persister, SessionFactoryImplementor factory, Map enabledFilters, String alias) {
- super( factory, enabledFilters );
+ public AbstractEntityJoinWalker(
+ OuterJoinLoadable persister,
+ SessionFactoryImplementor factory,
+ LoadQueryInfluencers loadQueryInfluencers,
+ String alias) {
+ super( factory, loadQueryInfluencers );
this.persister = persister;
this.alias = ( alias == null ) ? generateRootAlias( persister.getEntityName() ) : alias;
}
protected final void initAll(
- final String whereString,
- final String orderByString,
- final LockMode lockMode)
- throws MappingException {
+ final String whereString,
+ final String orderByString,
+ final LockMode lockMode) throws MappingException {
walkEntityTree( persister, getAlias() );
List allAssociations = new ArrayList();
allAssociations.addAll(associations);
- allAssociations.add( new OuterJoinableAssociation(
- persister.getEntityType(),
- null,
- null,
- alias,
- JoinFragment.LEFT_OUTER_JOIN,
- getFactory(),
- CollectionHelper.EMPTY_MAP
- ) );
-
+ allAssociations.add(
+ new OuterJoinableAssociation(
+ persister.getEntityType(),
+ null,
+ null,
+ alias,
+ JoinFragment.LEFT_OUTER_JOIN,
+ getFactory(),
+ CollectionHelper.EMPTY_MAP
+ )
+ );
initPersisters(allAssociations, lockMode);
initStatementString( whereString, orderByString, lockMode);
}
protected final void initProjection(
- final String projectionString,
- final String whereString,
- final String orderByString,
- final String groupByString,
- final LockMode lockMode)
- throws MappingException {
+ final String projectionString,
+ final String whereString,
+ final String orderByString,
+ final String groupByString,
+ final LockMode lockMode) throws MappingException {
walkEntityTree( persister, getAlias() );
persisters = new Loadable[0];
initStatementString(projectionString, whereString, orderByString, groupByString, lockMode);
}
private void initStatementString(
- final String condition,
- final String orderBy,
- final LockMode lockMode)
- throws MappingException {
+ final String condition,
+ final String orderBy,
+ final LockMode lockMode) throws MappingException {
initStatementString(null, condition, orderBy, "", lockMode);
}
@@ -149,9 +157,35 @@
* The superclass deliberately excludes collections
*/
protected boolean isJoinedFetchEnabled(AssociationType type, FetchMode config, CascadeStyle cascadeStyle) {
- return isJoinedFetchEnabledInMapping(config, type);
+ return isJoinedFetchEnabledInMapping( config, type );
}
+ protected final boolean isJoinFetchEnabledByProfile(OuterJoinLoadable persister, String path, int propertyNumber) {
+ if ( !getLoadQueryInfluencers().hasEnabledFetchProfiles() ) {
+ // perf optimization
+ return false;
+ }
+
+ // ugh, this stuff has to be made easier...
+ String rootPropertyName = persister.getSubclassPropertyName( propertyNumber );
+ int pos = path.lastIndexOf( rootPropertyName );
+ String relativePropertyPath = pos >= 0
+ ? path.substring( pos )
+ : rootPropertyName;
+ String fetchRole = persister.getEntityName() + "." + relativePropertyPath;
+
+ Iterator profiles = getLoadQueryInfluencers().getEnabledFetchProfileNames().iterator();
+ while ( profiles.hasNext() ) {
+ final String profileName = ( String ) profiles.next();
+ final FetchProfile profile = getFactory().getFetchProfile( profileName );
+ final Fetch fetch = profile.getFetchByRole( fetchRole );
+ if ( fetch != null && Fetch.Style.JOIN == fetch.getStyle() ) {
+ return true;
+ }
+ }
+ return false;
+ }
+
public abstract String getComment();
protected final Loadable getPersister() {
Modified: core/trunk/core/src/main/java/org/hibernate/loader/JoinWalker.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/loader/JoinWalker.java 2008-08-15 21:03:38 UTC (rev 15090)
+++ core/trunk/core/src/main/java/org/hibernate/loader/JoinWalker.java 2008-08-15 21:20:15 UTC (rev 15091)
@@ -29,7 +29,6 @@
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
-import java.util.Map;
import java.util.Set;
import org.hibernate.FetchMode;
@@ -39,6 +38,9 @@
import org.hibernate.engine.CascadeStyle;
import org.hibernate.engine.JoinHelper;
import org.hibernate.engine.SessionFactoryImplementor;
+import org.hibernate.engine.LoadQueryInfluencers;
+import org.hibernate.engine.profile.FetchProfile;
+import org.hibernate.engine.profile.Fetch;
import org.hibernate.persister.collection.CollectionPersister;
import org.hibernate.persister.collection.QueryableCollection;
import org.hibernate.persister.entity.EntityPersister;
@@ -69,7 +71,7 @@
private final SessionFactoryImplementor factory;
protected final List associations = new ArrayList();
private final Set visitedAssociationKeys = new HashSet();
- private final Map enabledFilters;
+ private final LoadQueryInfluencers loadQueryInfluencers;
protected String[] suffixes;
protected String[] collectionSuffixes;
@@ -81,6 +83,14 @@
protected String[] aliases;
protected LockMode[] lockModeArray;
protected String sql;
+
+ protected JoinWalker(
+ SessionFactoryImplementor factory,
+ LoadQueryInfluencers loadQueryInfluencers) {
+ this.factory = factory;
+ this.loadQueryInfluencers = loadQueryInfluencers;
+
+ }
public String[] getCollectionSuffixes() {
return collectionSuffixes;
@@ -169,14 +179,9 @@
protected Dialect getDialect() {
return factory.getDialect();
}
-
- protected Map getEnabledFilters() {
- return enabledFilters;
- }
- protected JoinWalker(SessionFactoryImplementor factory, Map enabledFilters) {
- this.factory = factory;
- this.enabledFilters = enabledFilters;
+ public LoadQueryInfluencers getLoadQueryInfluencers() {
+ return loadQueryInfluencers;
}
/**
@@ -184,15 +189,13 @@
* of associations to be fetched by outerjoin (if necessary)
*/
private void addAssociationToJoinTreeIfNecessary(
- final AssociationType type,
- final String[] aliasedLhsColumns,
- final String alias,
- final String path,
- int currentDepth,
- final int joinType)
- throws MappingException {
-
- if (joinType>=0) {
+ final AssociationType type,
+ final String[] aliasedLhsColumns,
+ final String alias,
+ final String path,
+ int currentDepth,
+ final int joinType) throws MappingException {
+ if ( joinType >= 0 ) {
addAssociationToJoinTree(
type,
aliasedLhsColumns,
@@ -200,9 +203,8 @@
path,
currentDepth,
joinType
- );
+ );
}
-
}
/**
@@ -210,35 +212,37 @@
* of associations to be fetched by outerjoin
*/
private void addAssociationToJoinTree(
- final AssociationType type,
- final String[] aliasedLhsColumns,
- final String alias,
- final String path,
- final int currentDepth,
- final int joinType)
- throws MappingException {
+ final AssociationType type,
+ final String[] aliasedLhsColumns,
+ final String alias,
+ String path,
+ final int currentDepth,
+ final int joinType) throws MappingException {
Joinable joinable = type.getAssociatedJoinable( getFactory() );
- String subalias = generateTableAlias(
- associations.size()+1, //before adding to collection!
- path,
- joinable
- );
+ // important to generate alias based on size of association collection
+ // *before* adding this join to that collection
+ String subalias = generateTableAlias( associations.size() + 1, path, joinable );
+ // NOTE : it should be fine to continue to pass only filters below
+ // (instead of LoadQueryInfluencers) since "from that point on" we
+ // only need to worry about restrictions (and not say adding more
+ // joins)
OuterJoinableAssociation assoc = new OuterJoinableAssociation(
type,
alias,
aliasedLhsColumns,
subalias,
joinType,
- getFactory(),
- enabledFilters
- );
- assoc.validateJoin(path);
- associations.add(assoc);
+ getFactory(),
+ loadQueryInfluencers.getEnabledFilters()
+ );
+ assoc.validateJoin( path );
+ associations.add( assoc );
- int nextDepth = currentDepth+1;
+ int nextDepth = currentDepth + 1;
+// path = "";
if ( !joinable.isCollection() ) {
if (joinable instanceof OuterJoinLoadable) {
walkEntityTree(
@@ -263,11 +267,19 @@
}
/**
- * For an entity class, return a list of associations to be fetched by outerjoin
+ * Walk the association tree for an entity, adding associations which should
+ * be join fetched to the {@link #associations} inst var. This form is the
+ * entry point into the walking for a given entity, starting the recursive
+ * calls into {@link #walkEntityTree(OuterJoinLoadable, String, String, int)}.
+ *
+ * @param persister The persister representing the entity to be walked.
+ * @param alias The (root) alias to use for this entity/persister.
+ * @throws org.hibernate.MappingException ???
*/
- protected final void walkEntityTree(OuterJoinLoadable persister, String alias)
- throws MappingException {
- walkEntityTree(persister, alias, "", 0);
+ protected final void walkEntityTree(
+ OuterJoinLoadable persister,
+ String alias) throws MappingException {
+ walkEntityTree( persister, alias, "", 0 );
}
/**
@@ -344,38 +356,49 @@
}
/**
- * Walk the tree for a particular entity association
+ * Process a particular association owned by the entity
+ *
+ * @param associationType The type representing the association to be
+ * processed.
+ * @param persister The owner of the association to be processed.
+ * @param propertyNumber The property number for the association
+ * (relative to the persister).
+ * @param alias The entity alias
+ * @param path The path to the association
+ * @param nullable is the association nullable (which I think is supposed
+ * to indicate inner/outer join semantics).
+ * @param currentDepth The current join depth
+ * @throws org.hibernate.MappingException ???
*/
- private final void walkEntityAssociationTree(
- final AssociationType associationType,
- final OuterJoinLoadable persister,
- final int propertyNumber,
- final String alias,
- final String path,
- final boolean nullable,
- final int currentDepth)
- throws MappingException {
-
+ private void walkEntityAssociationTree(
+ final AssociationType associationType,
+ final OuterJoinLoadable persister,
+ final int propertyNumber,
+ final String alias,
+ final String path,
+ final boolean nullable,
+ final int currentDepth) throws MappingException {
String[] aliasedLhsColumns = JoinHelper.getAliasedLHSColumnNames(
associationType, alias, propertyNumber, persister, getFactory()
- );
-
+ );
String[] lhsColumns = JoinHelper.getLHSColumnNames(
associationType, propertyNumber, persister, getFactory()
- );
+ );
String lhsTable = JoinHelper.getLHSTableName(associationType, propertyNumber, persister);
String subpath = subPath( path, persister.getSubclassPropertyName(propertyNumber) );
int joinType = getJoinType(
+ persister,
+ subpath,
+ propertyNumber,
associationType,
- persister.getFetchMode(propertyNumber),
- subpath,
+ persister.getFetchMode( propertyNumber ),
+ persister.getCascadeStyle( propertyNumber ),
lhsTable,
lhsColumns,
nullable,
- currentDepth,
- persister.getCascadeStyle(propertyNumber)
- );
+ currentDepth
+ );
addAssociationToJoinTreeIfNecessary(
associationType,
aliasedLhsColumns,
@@ -383,27 +406,110 @@
subpath,
currentDepth,
joinType
- );
+ );
+ }
+ /**
+ * Determine the appropriate type of join (if any) to use to fetch the
+ * given association.
+ *
+ * @param persister The owner of the association.
+ * @param path The path to the association
+ * @param propertyNumber The property number representing the association.
+ * @param associationType The association type.
+ * @param metadataFetchMode The metadata-defined fetch mode.
+ * @param metadataCascadeStyle The metadata-defined cascade style.
+ * @param lhsTable The owner table
+ * @param lhsColumns The owner join columns
+ * @param nullable Is the association nullable.
+ * @param currentDepth Current join depth
+ * @return type of join to use ({@link JoinFragment#INNER_JOIN},
+ * {@link JoinFragment#LEFT_OUTER_JOIN}, or -1 to indicate no joining.
+ * @throws MappingException ??
+ */
+ protected int getJoinType(
+ OuterJoinLoadable persister,
+ final String path,
+ int propertyNumber,
+ AssociationType associationType,
+ FetchMode metadataFetchMode,
+ CascadeStyle metadataCascadeStyle,
+ String lhsTable,
+ String[] lhsColumns,
+ final boolean nullable,
+ final int currentDepth) throws MappingException {
+ return getJoinType(
+ associationType,
+ metadataFetchMode,
+ path,
+ lhsTable,
+ lhsColumns,
+ nullable,
+ currentDepth,
+ metadataCascadeStyle
+ );
}
/**
- * For an entity class, add to a list of associations to be fetched
- * by outerjoin
+ * Determine the appropriate associationType of join (if any) to use to fetch the
+ * given association.
+ *
+ * @param associationType The association associationType.
+ * @param config The metadata-defined fetch mode.
+ * @param path The path to the association
+ * @param lhsTable The owner table
+ * @param lhsColumns The owner join columns
+ * @param nullable Is the association nullable.
+ * @param currentDepth Current join depth
+ * @param cascadeStyle The metadata-defined cascade style.
+ * @return type of join to use ({@link JoinFragment#INNER_JOIN},
+ * {@link JoinFragment#LEFT_OUTER_JOIN}, or -1 to indicate no joining.
+ * @throws MappingException ??
*/
- private final void walkEntityTree(
- final OuterJoinLoadable persister,
- final String alias,
- final String path,
- final int currentDepth)
- throws MappingException {
+ private int getJoinType(
+ AssociationType associationType,
+ FetchMode config,
+ String path,
+ String lhsTable,
+ String[] lhsColumns,
+ boolean nullable,
+ int currentDepth,
+ CascadeStyle cascadeStyle) throws MappingException {
+ if ( !isJoinedFetchEnabled( associationType, config, cascadeStyle ) ) {
+ return -1;
+ }
+ if ( isTooDeep(currentDepth) || ( associationType.isCollectionType() && isTooManyCollections() ) ) {
+ return -1;
+ }
+ if ( isDuplicateAssociation( lhsTable, lhsColumns, associationType ) ) {
+ return -1;
+ }
+ return getJoinType( nullable, currentDepth );
+ }
+ /**
+ * Walk the association tree for an entity, adding associations which should
+ * be join fetched to the {@link #associations} inst var. This form is the
+ * entry point into the walking for a given entity, starting the recursive
+ * calls into {@link #walkEntityTree(OuterJoinLoadable, String, String, int)}.
+ *
+ * @param persister The persister representing the entity to be walked.
+ * @param alias The (root) alias to use for this entity/persister.
+ * @param path todo this seems to be rooted at the *root* persister
+ * @param currentDepth The current join depth
+ * @throws org.hibernate.MappingException ???
+ */
+ private void walkEntityTree(
+ final OuterJoinLoadable persister,
+ final String alias,
+ final String path,
+ final int currentDepth) throws MappingException {
int n = persister.countSubclassProperties();
- for ( int i=0; i<n; i++ ) {
+ for ( int i = 0; i < n; i++ ) {
Type type = persister.getSubclassPropertyType(i);
if ( type.isAssociationType() ) {
walkEntityAssociationTree(
- (AssociationType) type,
+ ( AssociationType ) type,
persister,
i,
alias,
@@ -414,7 +520,7 @@
}
else if ( type.isComponentType() ) {
walkComponentTree(
- (AbstractComponentType) type,
+ ( AbstractComponentType ) type,
i,
0,
persister,
@@ -428,28 +534,34 @@
/**
* For a component, add to a list of associations to be fetched by outerjoin
+ *
+ *
+ * @param componentType The component type to be walked.
+ * @param propertyNumber The property number for the component property (relative to
+ * persister).
+ * @param begin todo unknowm
+ * @param persister The owner of the component property
+ * @param alias The root alias
+ * @param path The property access path
+ * @param currentDepth The current join depth
+ * @throws org.hibernate.MappingException ???
*/
private void walkComponentTree(
- final AbstractComponentType componentType,
- final int propertyNumber,
- int begin,
- final OuterJoinLoadable persister,
- final String alias,
- final String path,
- final int currentDepth
- ) throws MappingException {
-
+ final AbstractComponentType componentType,
+ final int propertyNumber,
+ int begin,
+ final OuterJoinLoadable persister,
+ final String alias,
+ final String path,
+ final int currentDepth) throws MappingException {
Type[] types = componentType.getSubtypes();
String[] propertyNames = componentType.getPropertyNames();
- for ( int i=0; i <types.length; i++ ) {
-
+ for ( int i = 0; i < types.length; i++ ) {
if ( types[i].isAssociationType() ) {
AssociationType associationType = (AssociationType) types[i];
-
String[] aliasedLhsColumns = JoinHelper.getAliasedLHSColumnNames(
associationType, alias, propertyNumber, begin, persister, getFactory()
);
-
String[] lhsColumns = JoinHelper.getLHSColumnNames(
associationType, propertyNumber, begin, persister, getFactory()
);
@@ -458,15 +570,17 @@
String subpath = subPath( path, propertyNames[i] );
final boolean[] propertyNullability = componentType.getPropertyNullability();
final int joinType = getJoinType(
+ persister,
+ subpath,
+ propertyNumber,
associationType,
componentType.getFetchMode(i),
- subpath,
+ componentType.getCascadeStyle(i),
lhsTable,
lhsColumns,
propertyNullability==null || propertyNullability[i],
- currentDepth,
- componentType.getCascadeStyle(i)
- );
+ currentDepth
+ );
addAssociationToJoinTreeIfNecessary(
associationType,
aliasedLhsColumns,
@@ -474,23 +588,22 @@
subpath,
currentDepth,
joinType
- );
+ );
}
else if ( types[i].isComponentType() ) {
String subpath = subPath( path, propertyNames[i] );
walkComponentTree(
- (AbstractComponentType) types[i],
+ ( AbstractComponentType ) types[i],
propertyNumber,
begin,
persister,
alias,
subpath,
currentDepth
- );
+ );
}
-
- begin+=types[i].getColumnSpan( getFactory() );
+ begin += types[i].getColumnSpan( getFactory() );
}
}
@@ -499,13 +612,12 @@
* For a composite element, add to a list of associations to be fetched by outerjoin
*/
private void walkCompositeElementTree(
- final AbstractComponentType compositeType,
- final String[] cols,
- final QueryableCollection persister,
- final String alias,
- final String path,
- final int currentDepth)
- throws MappingException {
+ final AbstractComponentType compositeType,
+ final String[] cols,
+ final QueryableCollection persister,
+ final String alias,
+ final String path,
+ final int currentDepth) throws MappingException {
Type[] types = compositeType.getSubtypes();
String[] propertyNames = compositeType.getPropertyNames();
@@ -571,42 +683,15 @@
}
/**
- * Get the join type (inner, outer, etc) or -1 if the
- * association should not be joined. Override on
- * subclasses.
- */
- protected int getJoinType(
- AssociationType type,
- FetchMode config,
- String path,
- String lhsTable,
- String[] lhsColumns,
- boolean nullable,
- int currentDepth,
- CascadeStyle cascadeStyle)
- throws MappingException {
-
- if ( !isJoinedFetchEnabled(type, config, cascadeStyle) ) return -1;
-
- if ( isTooDeep(currentDepth) || ( type.isCollectionType() && isTooManyCollections() ) ) return -1;
-
- final boolean dupe = isDuplicateAssociation(lhsTable, lhsColumns, type);
- if (dupe) return -1;
-
- return getJoinType(nullable, currentDepth);
-
- }
-
- /**
* Use an inner join if it is a non-null association and this
* is the "first" join in a series
*/
protected int getJoinType(boolean nullable, int currentDepth) {
//TODO: this is too conservative; if all preceding joins were
// also inner joins, we could use an inner join here
- return !nullable && currentDepth==0 ?
- JoinFragment.INNER_JOIN :
- JoinFragment.LEFT_OUTER_JOIN;
+ return !nullable && currentDepth == 0
+ ? JoinFragment.INNER_JOIN
+ : JoinFragment.LEFT_OUTER_JOIN;
}
protected boolean isTooDeep(int currentDepth) {
@@ -654,8 +739,7 @@
protected String generateTableAlias(
final int n,
final String path,
- final Joinable joinable
- ) {
+ final Joinable joinable) {
return StringHelper.generateAlias( joinable.getName(), n );
}
Modified: core/trunk/core/src/main/java/org/hibernate/loader/OuterJoinLoader.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/loader/OuterJoinLoader.java 2008-08-15 21:03:38 UTC (rev 15090)
+++ core/trunk/core/src/main/java/org/hibernate/loader/OuterJoinLoader.java 2008-08-15 21:20:15 UTC (rev 15091)
@@ -25,10 +25,12 @@
package org.hibernate.loader;
import java.util.Map;
+import java.util.Set;
import org.hibernate.LockMode;
import org.hibernate.dialect.Dialect;
import org.hibernate.engine.SessionFactoryImplementor;
+import org.hibernate.engine.LoadQueryInfluencers;
import org.hibernate.persister.collection.CollectionPersister;
import org.hibernate.persister.entity.Loadable;
import org.hibernate.type.EntityType;
@@ -54,15 +56,17 @@
protected String[] suffixes;
protected String[] collectionSuffixes;
- private Map enabledFilters;
-
- protected final Dialect getDialect() {
+ private LoadQueryInfluencers loadQueryInfluencers;
+
+ protected final Dialect getDialect() {
return getFactory().getDialect();
}
- public OuterJoinLoader(SessionFactoryImplementor factory, Map enabledFilters) {
- super(factory);
- this.enabledFilters = enabledFilters;
+ public OuterJoinLoader(
+ SessionFactoryImplementor factory,
+ LoadQueryInfluencers loadQueryInfluencers) {
+ super( factory );
+ this.loadQueryInfluencers = loadQueryInfluencers;
}
protected String[] getSuffixes() {
@@ -92,9 +96,9 @@
protected LockMode[] getLockModes(Map lockModes) {
return lockModeArray;
}
-
- public Map getEnabledFilters() {
- return enabledFilters;
+
+ public LoadQueryInfluencers getLoadQueryInfluencers() {
+ return loadQueryInfluencers;
}
protected final String[] getAliases() {
Modified: core/trunk/core/src/main/java/org/hibernate/loader/OuterJoinableAssociation.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/loader/OuterJoinableAssociation.java 2008-08-15 21:03:38 UTC (rev 15090)
+++ core/trunk/core/src/main/java/org/hibernate/loader/OuterJoinableAssociation.java 2008-08-15 21:20:15 UTC (rev 15091)
@@ -36,6 +36,12 @@
import org.hibernate.type.AssociationType;
import org.hibernate.type.EntityType;
+/**
+ * Part of the Hibernate SQL rendering internals. This class represents
+ * a joinable association.
+ *
+ * @author Gavin King
+ */
public final class OuterJoinableAssociation {
private final AssociationType joinableType;
private final Joinable joinable;
@@ -48,14 +54,13 @@
private final Map enabledFilters;
public OuterJoinableAssociation(
- AssociationType joinableType,
- String lhsAlias,
- String[] lhsColumns,
- String rhsAlias,
- int joinType,
- SessionFactoryImplementor factory,
- Map enabledFilters)
- throws MappingException {
+ AssociationType joinableType,
+ String lhsAlias,
+ String[] lhsColumns,
+ String rhsAlias,
+ int joinType,
+ SessionFactoryImplementor factory,
+ Map enabledFilters) throws MappingException {
this.joinableType = joinableType;
this.lhsAlias = lhsAlias;
this.lhsColumns = lhsColumns;
Modified: core/trunk/core/src/main/java/org/hibernate/loader/collection/BasicCollectionJoinWalker.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/loader/collection/BasicCollectionJoinWalker.java 2008-08-15 21:03:38 UTC (rev 15090)
+++ core/trunk/core/src/main/java/org/hibernate/loader/collection/BasicCollectionJoinWalker.java 2008-08-15 21:20:15 UTC (rev 15091)
@@ -34,9 +34,12 @@
import org.hibernate.LockMode;
import org.hibernate.MappingException;
import org.hibernate.engine.SessionFactoryImplementor;
+import org.hibernate.engine.LoadQueryInfluencers;
+import org.hibernate.engine.CascadeStyle;
import org.hibernate.loader.BasicLoader;
import org.hibernate.loader.OuterJoinableAssociation;
import org.hibernate.persister.collection.QueryableCollection;
+import org.hibernate.persister.entity.OuterJoinLoadable;
import org.hibernate.sql.JoinFragment;
import org.hibernate.sql.Select;
import org.hibernate.type.AssociationType;
@@ -58,10 +61,9 @@
int batchSize,
String subquery,
SessionFactoryImplementor factory,
- Map enabledFilters)
- throws MappingException {
+ LoadQueryInfluencers loadQueryInfluencers) throws MappingException {
- super(factory, enabledFilters);
+ super( factory, loadQueryInfluencers );
this.collectionPersister = collectionPersister;
@@ -71,26 +73,25 @@
List allAssociations = new ArrayList();
allAssociations.addAll(associations);
- allAssociations.add( new OuterJoinableAssociation(
- collectionPersister.getCollectionType(),
- null,
- null,
- alias,
- JoinFragment.LEFT_OUTER_JOIN,
- getFactory(),
- CollectionHelper.EMPTY_MAP
- ) );
-
+ allAssociations.add(
+ new OuterJoinableAssociation(
+ collectionPersister.getCollectionType(),
+ null,
+ null,
+ alias,
+ JoinFragment.LEFT_OUTER_JOIN,
+ getFactory(),
+ CollectionHelper.EMPTY_MAP
+ )
+ );
initPersisters(allAssociations, LockMode.NONE);
initStatementString(alias, batchSize, subquery);
-
}
private void initStatementString(
final String alias,
final int batchSize,
- final String subquery)
- throws MappingException {
+ final String subquery) throws MappingException {
final int joins = countEntityPersisters( associations );
final int collectionJoins = countCollectionPersisters( associations ) + 1;
@@ -106,7 +107,7 @@
);
String manyToManyOrderBy = "";
- String filter = collectionPersister.filterFragment( alias, getEnabledFilters() );
+ String filter = collectionPersister.filterFragment( alias, getLoadQueryInfluencers().getEnabledFilters() );
if ( collectionPersister.isManyToMany() ) {
// from the collection of associations, locate OJA for the
// ManyToOne corresponding to this persister to fully
@@ -121,9 +122,9 @@
// we found it
filter += collectionPersister.getManyToManyFilterFragment(
oja.getRHSAlias(),
- getEnabledFilters()
+ getLoadQueryInfluencers().getEnabledFilters()
);
- manyToManyOrderBy += collectionPersister.getManyToManyOrderByString( oja.getRHSAlias() );
+ manyToManyOrderBy += collectionPersister.getManyToManyOrderByString( oja.getRHSAlias() );
}
}
}
@@ -151,37 +152,36 @@
sql = select.toStatementString();
}
- /**
- * We can use an inner join for first many-to-many association
- */
protected int getJoinType(
- AssociationType type,
- FetchMode config,
- String path,
- Set visitedAssociations,
+ OuterJoinLoadable persister,
+ String path,
+ int propertyNumber,
+ AssociationType associationType,
+ FetchMode metadataFetchMode,
+ CascadeStyle metadataCascadeStyle,
String lhsTable,
String[] lhsColumns,
boolean nullable,
- int currentDepth)
- throws MappingException {
-
+ int currentDepth) throws MappingException {
int joinType = super.getJoinType(
- type,
- config,
- path,
- lhsTable,
- lhsColumns,
- nullable,
- currentDepth,
- null
- );
+ persister,
+ path,
+ propertyNumber,
+ associationType,
+ metadataFetchMode,
+ metadataCascadeStyle,
+ lhsTable,
+ lhsColumns,
+ nullable,
+ currentDepth
+ );
//we can use an inner join for the many-to-many
if ( joinType==JoinFragment.LEFT_OUTER_JOIN && "".equals(path) ) {
joinType=JoinFragment.INNER_JOIN;
}
return joinType;
}
-
+
public String toString() {
return getClass().getName() + '(' + collectionPersister.getRole() + ')';
}
Modified: core/trunk/core/src/main/java/org/hibernate/loader/collection/BasicCollectionLoader.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/loader/collection/BasicCollectionLoader.java 2008-08-15 21:03:38 UTC (rev 15090)
+++ core/trunk/core/src/main/java/org/hibernate/loader/collection/BasicCollectionLoader.java 2008-08-15 21:20:15 UTC (rev 15091)
@@ -24,12 +24,11 @@
*/
package org.hibernate.loader.collection;
-import java.util.Map;
-
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.hibernate.MappingException;
import org.hibernate.engine.SessionFactoryImplementor;
+import org.hibernate.engine.LoadQueryInfluencers;
import org.hibernate.loader.JoinWalker;
import org.hibernate.persister.collection.QueryableCollection;
@@ -49,18 +48,16 @@
public BasicCollectionLoader(
QueryableCollection collectionPersister,
SessionFactoryImplementor session,
- Map enabledFilters)
- throws MappingException {
- this(collectionPersister, 1, session, enabledFilters);
+ LoadQueryInfluencers loadQueryInfluencers) throws MappingException {
+ this( collectionPersister, 1, session, loadQueryInfluencers );
}
public BasicCollectionLoader(
QueryableCollection collectionPersister,
int batchSize,
SessionFactoryImplementor factory,
- Map enabledFilters)
- throws MappingException {
- this(collectionPersister, batchSize, null, factory, enabledFilters);
+ LoadQueryInfluencers loadQueryInfluencers) throws MappingException {
+ this( collectionPersister, batchSize, null, factory, loadQueryInfluencers );
}
protected BasicCollectionLoader(
@@ -68,18 +65,16 @@
int batchSize,
String subquery,
SessionFactoryImplementor factory,
- Map enabledFilters)
- throws MappingException {
+ LoadQueryInfluencers loadQueryInfluencers) throws MappingException {
+ super( collectionPersister, factory, loadQueryInfluencers );
- super(collectionPersister, factory, enabledFilters);
-
JoinWalker walker = new BasicCollectionJoinWalker(
collectionPersister,
batchSize,
subquery,
factory,
- enabledFilters
- );
+ loadQueryInfluencers
+ );
initFromWalker( walker );
postInstantiate();
Modified: core/trunk/core/src/main/java/org/hibernate/loader/collection/BatchingCollectionInitializer.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/loader/collection/BatchingCollectionInitializer.java 2008-08-15 21:03:38 UTC (rev 15090)
+++ core/trunk/core/src/main/java/org/hibernate/loader/collection/BatchingCollectionInitializer.java 2008-08-15 21:20:15 UTC (rev 15091)
@@ -31,6 +31,7 @@
import org.hibernate.MappingException;
import org.hibernate.engine.SessionFactoryImplementor;
import org.hibernate.engine.SessionImplementor;
+import org.hibernate.engine.LoadQueryInfluencers;
import org.hibernate.loader.Loader;
import org.hibernate.persister.collection.CollectionPersister;
import org.hibernate.persister.collection.QueryableCollection;
@@ -77,42 +78,38 @@
}
public static CollectionInitializer createBatchingOneToManyInitializer(
- final QueryableCollection persister,
- final int maxBatchSize,
- final SessionFactoryImplementor factory,
- final Map enabledFilters)
- throws MappingException {
-
- if ( maxBatchSize>1 ) {
+ final QueryableCollection persister,
+ final int maxBatchSize,
+ final SessionFactoryImplementor factory,
+ final LoadQueryInfluencers loadQueryInfluencers) throws MappingException {
+ if ( maxBatchSize > 1 ) {
int[] batchSizesToCreate = ArrayHelper.getBatchSizes(maxBatchSize);
Loader[] loadersToCreate = new Loader[ batchSizesToCreate.length ];
for ( int i=0; i<batchSizesToCreate.length; i++ ) {
- loadersToCreate[i] = new OneToManyLoader(persister, batchSizesToCreate[i], factory, enabledFilters);
+ loadersToCreate[i] = new OneToManyLoader( persister, batchSizesToCreate[i], factory, loadQueryInfluencers );
}
- return new BatchingCollectionInitializer(persister, batchSizesToCreate, loadersToCreate);
+ return new BatchingCollectionInitializer( persister, batchSizesToCreate, loadersToCreate );
}
else {
- return new OneToManyLoader(persister, factory, enabledFilters);
+ return new OneToManyLoader( persister, factory, loadQueryInfluencers );
}
}
public static CollectionInitializer createBatchingCollectionInitializer(
- final QueryableCollection persister,
- final int maxBatchSize,
- final SessionFactoryImplementor factory,
- final Map enabledFilters)
- throws MappingException {
-
- if ( maxBatchSize>1 ) {
+ final QueryableCollection persister,
+ final int maxBatchSize,
+ final SessionFactoryImplementor factory,
+ final LoadQueryInfluencers loadQueryInfluencers) throws MappingException {
+ if ( maxBatchSize > 1 ) {
int[] batchSizesToCreate = ArrayHelper.getBatchSizes(maxBatchSize);
Loader[] loadersToCreate = new Loader[ batchSizesToCreate.length ];
for ( int i=0; i<batchSizesToCreate.length; i++ ) {
- loadersToCreate[i] = new BasicCollectionLoader(persister, batchSizesToCreate[i], factory, enabledFilters);
+ loadersToCreate[i] = new BasicCollectionLoader( persister, batchSizesToCreate[i], factory, loadQueryInfluencers );
}
return new BatchingCollectionInitializer(persister, batchSizesToCreate, loadersToCreate);
}
else {
- return new BasicCollectionLoader(persister, factory, enabledFilters);
+ return new BasicCollectionLoader( persister, factory, loadQueryInfluencers );
}
}
Modified: core/trunk/core/src/main/java/org/hibernate/loader/collection/CollectionJoinWalker.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/loader/collection/CollectionJoinWalker.java 2008-08-15 21:03:38 UTC (rev 15090)
+++ core/trunk/core/src/main/java/org/hibernate/loader/collection/CollectionJoinWalker.java 2008-08-15 21:20:15 UTC (rev 15091)
@@ -24,9 +24,8 @@
*/
package org.hibernate.loader.collection;
-import java.util.Map;
-
import org.hibernate.engine.SessionFactoryImplementor;
+import org.hibernate.engine.LoadQueryInfluencers;
import org.hibernate.loader.JoinWalker;
import org.hibernate.util.StringHelper;
@@ -40,8 +39,8 @@
*/
public abstract class CollectionJoinWalker extends JoinWalker {
- public CollectionJoinWalker(SessionFactoryImplementor factory, Map enabledFilters) {
- super( factory, enabledFilters );
+ public CollectionJoinWalker(SessionFactoryImplementor factory, LoadQueryInfluencers loadQueryInfluencers) {
+ super( factory, loadQueryInfluencers );
}
protected StringBuffer whereString(String alias, String[] columnNames, String subselect, int batchSize) {
Modified: core/trunk/core/src/main/java/org/hibernate/loader/collection/CollectionLoader.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/loader/collection/CollectionLoader.java 2008-08-15 21:03:38 UTC (rev 15090)
+++ core/trunk/core/src/main/java/org/hibernate/loader/collection/CollectionLoader.java 2008-08-15 21:20:15 UTC (rev 15091)
@@ -25,11 +25,11 @@
package org.hibernate.loader.collection;
import java.io.Serializable;
-import java.util.Map;
import org.hibernate.HibernateException;
import org.hibernate.engine.SessionFactoryImplementor;
import org.hibernate.engine.SessionImplementor;
+import org.hibernate.engine.LoadQueryInfluencers;
import org.hibernate.loader.OuterJoinLoader;
import org.hibernate.persister.collection.QueryableCollection;
import org.hibernate.type.Type;
@@ -45,8 +45,11 @@
private final QueryableCollection collectionPersister;
- public CollectionLoader(QueryableCollection collectionPersister, SessionFactoryImplementor factory, Map enabledFilters) {
- super( factory, enabledFilters );
+ public CollectionLoader(
+ QueryableCollection collectionPersister,
+ SessionFactoryImplementor factory,
+ LoadQueryInfluencers loadQueryInfluencers) {
+ super( factory, loadQueryInfluencers );
this.collectionPersister = collectionPersister;
}
Modified: core/trunk/core/src/main/java/org/hibernate/loader/collection/OneToManyJoinWalker.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/loader/collection/OneToManyJoinWalker.java 2008-08-15 21:03:38 UTC (rev 15090)
+++ core/trunk/core/src/main/java/org/hibernate/loader/collection/OneToManyJoinWalker.java 2008-08-15 21:20:15 UTC (rev 15091)
@@ -27,11 +27,11 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
-import java.util.Map;
import org.hibernate.LockMode;
import org.hibernate.MappingException;
import org.hibernate.engine.SessionFactoryImplementor;
+import org.hibernate.engine.LoadQueryInfluencers;
import org.hibernate.loader.BasicLoader;
import org.hibernate.loader.OuterJoinableAssociation;
import org.hibernate.persister.collection.QueryableCollection;
@@ -67,11 +67,9 @@
int batchSize,
String subquery,
SessionFactoryImplementor factory,
- Map enabledFilters)
- throws MappingException {
+ LoadQueryInfluencers loadQueryInfluencers) throws MappingException {
+ super( factory, loadQueryInfluencers );
- super(factory, enabledFilters);
-
this.oneToManyPersister = oneToManyPersister;
final OuterJoinLoadable elementPersister = (OuterJoinLoadable) oneToManyPersister.getElementPersister();
@@ -93,7 +91,6 @@
initPersisters(allAssociations, LockMode.NONE);
initStatementString(elementPersister, alias, batchSize, subquery);
-
}
private void initStatementString(
@@ -115,7 +112,7 @@
subquery,
batchSize
);
- String filter = oneToManyPersister.filterFragment( alias, getEnabledFilters() );
+ String filter = oneToManyPersister.filterFragment( alias, getLoadQueryInfluencers().getEnabledFilters() );
whereString.insert( 0, StringHelper.moveAndToBeginning(filter) );
JoinFragment ojf = mergeOuterJoins(associations);
Modified: core/trunk/core/src/main/java/org/hibernate/loader/collection/OneToManyLoader.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/loader/collection/OneToManyLoader.java 2008-08-15 21:03:38 UTC (rev 15090)
+++ core/trunk/core/src/main/java/org/hibernate/loader/collection/OneToManyLoader.java 2008-08-15 21:20:15 UTC (rev 15091)
@@ -24,12 +24,11 @@
*/
package org.hibernate.loader.collection;
-import java.util.Map;
-
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.hibernate.MappingException;
import org.hibernate.engine.SessionFactoryImplementor;
+import org.hibernate.engine.LoadQueryInfluencers;
import org.hibernate.loader.JoinWalker;
import org.hibernate.persister.collection.QueryableCollection;
@@ -49,18 +48,16 @@
public OneToManyLoader(
QueryableCollection oneToManyPersister,
SessionFactoryImplementor session,
- Map enabledFilters)
- throws MappingException {
- this(oneToManyPersister, 1, session, enabledFilters);
+ LoadQueryInfluencers loadQueryInfluencers) throws MappingException {
+ this( oneToManyPersister, 1, session, loadQueryInfluencers );
}
public OneToManyLoader(
QueryableCollection oneToManyPersister,
int batchSize,
SessionFactoryImplementor factory,
- Map enabledFilters)
- throws MappingException {
- this(oneToManyPersister, batchSize, null, factory, enabledFilters);
+ LoadQueryInfluencers loadQueryInfluencers) throws MappingException {
+ this( oneToManyPersister, batchSize, null, factory, loadQueryInfluencers );
}
public OneToManyLoader(
@@ -68,22 +65,19 @@
int batchSize,
String subquery,
SessionFactoryImplementor factory,
- Map enabledFilters)
- throws MappingException {
-
- super(oneToManyPersister, factory, enabledFilters);
+ LoadQueryInfluencers loadQueryInfluencers) throws MappingException {
+ super( oneToManyPersister, factory, loadQueryInfluencers );
JoinWalker walker = new OneToManyJoinWalker(
oneToManyPersister,
batchSize,
subquery,
factory,
- enabledFilters
- );
+ loadQueryInfluencers
+ );
initFromWalker( walker );
postInstantiate();
-
log.debug( "Static select for one-to-many " + oneToManyPersister.getRole() + ": " + getSQLString() );
}
Modified: core/trunk/core/src/main/java/org/hibernate/loader/collection/SubselectCollectionLoader.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/loader/collection/SubselectCollectionLoader.java 2008-08-15 21:03:38 UTC (rev 15090)
+++ core/trunk/core/src/main/java/org/hibernate/loader/collection/SubselectCollectionLoader.java 2008-08-15 21:20:15 UTC (rev 15091)
@@ -35,6 +35,7 @@
import org.hibernate.engine.QueryParameters;
import org.hibernate.engine.SessionFactoryImplementor;
import org.hibernate.engine.SessionImplementor;
+import org.hibernate.engine.LoadQueryInfluencers;
import org.hibernate.persister.collection.QueryableCollection;
import org.hibernate.type.Type;
@@ -57,10 +58,8 @@
QueryParameters queryParameters,
Map namedParameterLocMap,
SessionFactoryImplementor factory,
- Map enabledFilters)
- throws MappingException {
-
- super(persister, 1, subquery, factory, enabledFilters);
+ LoadQueryInfluencers loadQueryInfluencers) throws MappingException {
+ super( persister, 1, subquery, factory, loadQueryInfluencers );
keys = new Serializable[ entityKeys.size() ];
Iterator iter = entityKeys.iterator();
@@ -77,7 +76,7 @@
}
public void initialize(Serializable id, SessionImplementor session)
- throws HibernateException {
+ throws HibernateException {
loadCollectionSubselect(
session,
keys,
@@ -85,7 +84,7 @@
types,
namedParameters,
getKeyType()
- );
+ );
}
public int[] getNamedParameterLocs(String name) {
Modified: core/trunk/core/src/main/java/org/hibernate/loader/collection/SubselectOneToManyLoader.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/loader/collection/SubselectOneToManyLoader.java 2008-08-15 21:03:38 UTC (rev 15090)
+++ core/trunk/core/src/main/java/org/hibernate/loader/collection/SubselectOneToManyLoader.java 2008-08-15 21:20:15 UTC (rev 15091)
@@ -35,6 +35,7 @@
import org.hibernate.engine.QueryParameters;
import org.hibernate.engine.SessionFactoryImplementor;
import org.hibernate.engine.SessionImplementor;
+import org.hibernate.engine.LoadQueryInfluencers;
import org.hibernate.persister.collection.QueryableCollection;
import org.hibernate.type.Type;
@@ -57,10 +58,8 @@
QueryParameters queryParameters,
Map namedParameterLocMap,
SessionFactoryImplementor factory,
- Map enabledFilters)
- throws MappingException {
-
- super(persister, 1, subquery, factory, enabledFilters);
+ LoadQueryInfluencers loadQueryInfluencers) throws MappingException {
+ super( persister, 1, subquery, factory, loadQueryInfluencers );
keys = new Serializable[ entityKeys.size() ];
Iterator iter = entityKeys.iterator();
@@ -73,11 +72,9 @@
this.types = queryParameters.getFilteredPositionalParameterTypes();
this.values = queryParameters.getFilteredPositionalParameterValues();
this.namedParameterLocMap = namedParameterLocMap;
-
}
- public void initialize(Serializable id, SessionImplementor session)
- throws HibernateException {
+ public void initialize(Serializable id, SessionImplementor session) throws HibernateException {
loadCollectionSubselect(
session,
keys,
@@ -85,7 +82,7 @@
types,
namedParameters,
getKeyType()
- );
+ );
}
public int[] getNamedParameterLocs(String name) {
Modified: core/trunk/core/src/main/java/org/hibernate/loader/criteria/CriteriaJoinWalker.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/loader/criteria/CriteriaJoinWalker.java 2008-08-15 21:03:38 UTC (rev 15090)
+++ core/trunk/core/src/main/java/org/hibernate/loader/criteria/CriteriaJoinWalker.java 2008-08-15 21:20:15 UTC (rev 15091)
@@ -26,7 +26,6 @@
import java.util.ArrayList;
import java.util.List;
-import java.util.Map;
import java.util.Set;
import org.hibernate.Criteria;
@@ -35,6 +34,7 @@
import org.hibernate.MappingException;
import org.hibernate.engine.CascadeStyle;
import org.hibernate.engine.SessionFactoryImplementor;
+import org.hibernate.engine.LoadQueryInfluencers;
import org.hibernate.impl.CriteriaImpl;
import org.hibernate.loader.AbstractEntityJoinWalker;
import org.hibernate.persister.entity.Joinable;
@@ -78,8 +78,8 @@
final SessionFactoryImplementor factory,
final CriteriaImpl criteria,
final String rootEntityName,
- final Map enabledFilters) {
- this(persister, translator, factory, criteria, rootEntityName, enabledFilters, null);
+ final LoadQueryInfluencers loadQueryInfluencers) {
+ this( persister, translator, factory, criteria, rootEntityName, loadQueryInfluencers, null );
}
public CriteriaJoinWalker(
@@ -88,9 +88,9 @@
final SessionFactoryImplementor factory,
final CriteriaImpl criteria,
final String rootEntityName,
- final Map enabledFilters,
+ final LoadQueryInfluencers loadQueryInfluencers,
final String alias) {
- super(persister, factory, enabledFilters, alias);
+ super( persister, factory, loadQueryInfluencers, alias );
this.translator = translator;
@@ -119,16 +119,17 @@
}
protected int getJoinType(
- AssociationType type,
- FetchMode config,
- String path,
+ OuterJoinLoadable persister,
+ final String path,
+ int propertyNumber,
+ AssociationType associationType,
+ FetchMode metadataFetchMode,
+ CascadeStyle metadataCascadeStyle,
String lhsTable,
String[] lhsColumns,
- boolean nullable,
- int currentDepth, CascadeStyle cascadeStyle)
- throws MappingException {
-
- if ( translator.isJoin(path) ) {
+ final boolean nullable,
+ final int currentDepth) throws MappingException {
+ if ( translator.isJoin( path ) ) {
return translator.getJoinType( path );
}
else {
@@ -136,23 +137,30 @@
return -1;
}
else {
- FetchMode fetchMode = translator.getRootCriteria()
- .getFetchMode(path);
- if ( isDefaultFetchMode(fetchMode) ) {
- return super.getJoinType(
- type,
- config,
- path,
- lhsTable,
- lhsColumns,
- nullable,
- currentDepth, cascadeStyle
+ FetchMode fetchMode = translator.getRootCriteria().getFetchMode( path );
+ if ( isDefaultFetchMode( fetchMode ) ) {
+ if ( isJoinFetchEnabledByProfile( persister, path, propertyNumber ) ) {
+ return getJoinType( nullable, currentDepth );
+ }
+ else {
+ return super.getJoinType(
+ persister,
+ path,
+ propertyNumber,
+ associationType,
+ metadataFetchMode,
+ metadataCascadeStyle,
+ lhsTable,
+ lhsColumns,
+ nullable,
+ currentDepth
);
+ }
}
else {
- if ( fetchMode==FetchMode.JOIN ) {
- isDuplicateAssociation(lhsTable, lhsColumns, type); //deliberately ignore return value!
- return getJoinType(nullable, currentDepth);
+ if ( fetchMode == FetchMode.JOIN ) {
+ isDuplicateAssociation( lhsTable, lhsColumns, associationType ); //deliberately ignore return value!
+ return getJoinType( nullable, currentDepth );
}
else {
return -1;
@@ -172,7 +180,7 @@
*/
protected String getWhereFragment() throws MappingException {
return super.getWhereFragment() +
- ( (Queryable) getPersister() ).filterFragment( getAlias(), getEnabledFilters() );
+ ( (Queryable) getPersister() ).filterFragment( getAlias(), getLoadQueryInfluencers().getEnabledFilters() );
}
protected String generateTableAlias(int n, String path, Joinable joinable) {
Modified: core/trunk/core/src/main/java/org/hibernate/loader/criteria/CriteriaLoader.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/loader/criteria/CriteriaLoader.java 2008-08-15 21:03:38 UTC (rev 15090)
+++ core/trunk/core/src/main/java/org/hibernate/loader/criteria/CriteriaLoader.java 2008-08-15 21:20:15 UTC (rev 15091)
@@ -30,7 +30,6 @@
import java.util.List;
import java.util.Map;
import java.util.Set;
-import java.util.Iterator;
import org.hibernate.HibernateException;
import org.hibernate.LockMode;
@@ -41,6 +40,7 @@
import org.hibernate.engine.QueryParameters;
import org.hibernate.engine.SessionFactoryImplementor;
import org.hibernate.engine.SessionImplementor;
+import org.hibernate.engine.LoadQueryInfluencers;
import org.hibernate.impl.CriteriaImpl;
import org.hibernate.loader.OuterJoinLoader;
import org.hibernate.persister.entity.OuterJoinLoadable;
@@ -75,9 +75,8 @@
final SessionFactoryImplementor factory,
final CriteriaImpl criteria,
final String rootEntityName,
- final Map enabledFilters)
- throws HibernateException {
- super(factory, enabledFilters);
+ final LoadQueryInfluencers loadQueryInfluencers) throws HibernateException {
+ super( factory, loadQueryInfluencers );
translator = new CriteriaQueryTranslator(
factory,
@@ -94,7 +93,7 @@
factory,
criteria,
rootEntityName,
- enabledFilters
+ loadQueryInfluencers
);
initFromWalker(walker);
Modified: core/trunk/core/src/main/java/org/hibernate/loader/entity/AbstractEntityLoader.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/loader/entity/AbstractEntityLoader.java 2008-08-15 21:03:38 UTC (rev 15090)
+++ core/trunk/core/src/main/java/org/hibernate/loader/entity/AbstractEntityLoader.java 2008-08-15 21:20:15 UTC (rev 15091)
@@ -29,12 +29,14 @@
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.hibernate.HibernateException;
import org.hibernate.engine.SessionFactoryImplementor;
import org.hibernate.engine.SessionImplementor;
+import org.hibernate.engine.LoadQueryInfluencers;
import org.hibernate.loader.OuterJoinLoader;
import org.hibernate.persister.entity.OuterJoinLoadable;
import org.hibernate.transform.ResultTransformer;
@@ -52,8 +54,8 @@
OuterJoinLoadable persister,
Type uniqueKeyType,
SessionFactoryImplementor factory,
- Map enabledFilters) {
- super( factory, enabledFilters );
+ LoadQueryInfluencers loadQueryInfluencers) {
+ super( factory, loadQueryInfluencers );
this.uniqueKeyType = uniqueKeyType;
this.entityName = persister.getEntityName();
this.persister = persister;
Modified: core/trunk/core/src/main/java/org/hibernate/loader/entity/BatchingEntityLoader.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/loader/entity/BatchingEntityLoader.java 2008-08-15 21:03:38 UTC (rev 15090)
+++ core/trunk/core/src/main/java/org/hibernate/loader/entity/BatchingEntityLoader.java 2008-08-15 21:20:15 UTC (rev 15091)
@@ -28,12 +28,14 @@
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import org.hibernate.HibernateException;
import org.hibernate.LockMode;
import org.hibernate.MappingException;
import org.hibernate.engine.SessionFactoryImplementor;
import org.hibernate.engine.SessionImplementor;
+import org.hibernate.engine.LoadQueryInfluencers;
import org.hibernate.loader.Loader;
import org.hibernate.persister.entity.EntityPersister;
import org.hibernate.persister.entity.OuterJoinLoadable;
@@ -111,19 +113,18 @@
final int maxBatchSize,
final LockMode lockMode,
final SessionFactoryImplementor factory,
- final Map enabledFilters)
- throws MappingException {
+ final LoadQueryInfluencers loadQueryInfluencers) throws MappingException {
if ( maxBatchSize>1 ) {
int[] batchSizesToCreate = ArrayHelper.getBatchSizes(maxBatchSize);
Loader[] loadersToCreate = new Loader[ batchSizesToCreate.length ];
for ( int i=0; i<batchSizesToCreate.length; i++ ) {
- loadersToCreate[i] = new EntityLoader(persister, batchSizesToCreate[i], lockMode, factory, enabledFilters);
+ loadersToCreate[i] = new EntityLoader(persister, batchSizesToCreate[i], lockMode, factory, loadQueryInfluencers);
}
return new BatchingEntityLoader(persister, batchSizesToCreate, loadersToCreate);
}
else {
- return new EntityLoader(persister, lockMode, factory, enabledFilters);
+ return new EntityLoader(persister, lockMode, factory, loadQueryInfluencers);
}
}
Modified: core/trunk/core/src/main/java/org/hibernate/loader/entity/CascadeEntityJoinWalker.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/loader/entity/CascadeEntityJoinWalker.java 2008-08-15 21:03:38 UTC (rev 15090)
+++ core/trunk/core/src/main/java/org/hibernate/loader/entity/CascadeEntityJoinWalker.java 2008-08-15 21:20:15 UTC (rev 15091)
@@ -30,6 +30,7 @@
import org.hibernate.engine.CascadeStyle;
import org.hibernate.engine.CascadingAction;
import org.hibernate.engine.SessionFactoryImplementor;
+import org.hibernate.engine.LoadQueryInfluencers;
import org.hibernate.loader.AbstractEntityJoinWalker;
import org.hibernate.persister.entity.OuterJoinLoadable;
import org.hibernate.type.AssociationType;
@@ -41,7 +42,7 @@
public CascadeEntityJoinWalker(OuterJoinLoadable persister, CascadingAction action, SessionFactoryImplementor factory)
throws MappingException {
- super( persister, factory, CollectionHelper.EMPTY_MAP );
+ super( persister, factory, LoadQueryInfluencers.NONE );
this.cascadeAction = action;
StringBuffer whereCondition = whereString( getAlias(), persister.getIdentifierColumnNames(), 1 )
//include the discriminator and class-level where, but not filters
Modified: core/trunk/core/src/main/java/org/hibernate/loader/entity/CascadeEntityLoader.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/loader/entity/CascadeEntityLoader.java 2008-08-15 21:03:38 UTC (rev 15090)
+++ core/trunk/core/src/main/java/org/hibernate/loader/entity/CascadeEntityLoader.java 2008-08-15 21:20:15 UTC (rev 15091)
@@ -27,29 +27,28 @@
import org.hibernate.MappingException;
import org.hibernate.engine.CascadingAction;
import org.hibernate.engine.SessionFactoryImplementor;
+import org.hibernate.engine.LoadQueryInfluencers;
import org.hibernate.loader.JoinWalker;
import org.hibernate.persister.entity.OuterJoinLoadable;
-import org.hibernate.util.CollectionHelper;
public class CascadeEntityLoader extends AbstractEntityLoader {
public CascadeEntityLoader(
OuterJoinLoadable persister,
CascadingAction action,
- SessionFactoryImplementor factory)
- throws MappingException {
+ SessionFactoryImplementor factory) throws MappingException {
super(
persister,
persister.getIdentifierType(),
- factory,
- CollectionHelper.EMPTY_MAP
- );
+ factory,
+ LoadQueryInfluencers.NONE
+ );
JoinWalker walker = new CascadeEntityJoinWalker(
persister,
action,
factory
- );
+ );
initFromWalker( walker );
postInstantiate();
Modified: core/trunk/core/src/main/java/org/hibernate/loader/entity/CollectionElementLoader.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/loader/entity/CollectionElementLoader.java 2008-08-15 21:03:38 UTC (rev 15090)
+++ core/trunk/core/src/main/java/org/hibernate/loader/entity/CollectionElementLoader.java 2008-08-15 21:20:15 UTC (rev 15091)
@@ -27,7 +27,6 @@
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
-import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -36,6 +35,7 @@
import org.hibernate.MappingException;
import org.hibernate.engine.SessionFactoryImplementor;
import org.hibernate.engine.SessionImplementor;
+import org.hibernate.engine.LoadQueryInfluencers;
import org.hibernate.loader.JoinWalker;
import org.hibernate.loader.OuterJoinLoader;
import org.hibernate.persister.collection.QueryableCollection;
@@ -61,9 +61,8 @@
public CollectionElementLoader(
QueryableCollection collectionPersister,
SessionFactoryImplementor factory,
- Map enabledFilters)
- throws MappingException {
- super(factory, enabledFilters);
+ LoadQueryInfluencers loadQueryInfluencers) throws MappingException {
+ super( factory, loadQueryInfluencers );
this.keyType = collectionPersister.getKeyType();
this.indexType = collectionPersister.getIndexType();
@@ -79,7 +78,7 @@
1,
LockMode.NONE,
factory,
- enabledFilters
+ loadQueryInfluencers
);
initFromWalker( walker );
@@ -130,5 +129,4 @@
return true;
}
-
}
\ No newline at end of file
Modified: core/trunk/core/src/main/java/org/hibernate/loader/entity/EntityJoinWalker.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/loader/entity/EntityJoinWalker.java 2008-08-15 21:03:38 UTC (rev 15090)
+++ core/trunk/core/src/main/java/org/hibernate/loader/entity/EntityJoinWalker.java 2008-08-15 21:20:15 UTC (rev 15091)
@@ -25,13 +25,16 @@
package org.hibernate.loader.entity;
import java.util.Collections;
-import java.util.Map;
+import java.util.Iterator;
import org.hibernate.FetchMode;
import org.hibernate.LockMode;
import org.hibernate.MappingException;
import org.hibernate.engine.CascadeStyle;
import org.hibernate.engine.SessionFactoryImplementor;
+import org.hibernate.engine.LoadQueryInfluencers;
+import org.hibernate.engine.profile.FetchProfile;
+import org.hibernate.engine.profile.Fetch;
import org.hibernate.loader.AbstractEntityJoinWalker;
import org.hibernate.persister.entity.OuterJoinLoadable;
import org.hibernate.type.AssociationType;
@@ -52,28 +55,47 @@
int batchSize,
LockMode lockMode,
SessionFactoryImplementor factory,
- Map enabledFilters)
- throws MappingException {
- super(persister, factory, enabledFilters);
+ LoadQueryInfluencers loadQueryInfluencers) throws MappingException {
+ super( persister, factory, loadQueryInfluencers );
this.lockMode = lockMode;
StringBuffer whereCondition = whereString( getAlias(), uniqueKey, batchSize )
- //include the discriminator and class-level where, but not filters
- .append( persister.filterFragment( getAlias(), Collections.EMPTY_MAP ) );
+ //include the discriminator and class-level where, but not filters
+ .append( persister.filterFragment( getAlias(), Collections.EMPTY_MAP ) );
initAll( whereCondition.toString(), "", lockMode );
-
}
- /**
- * Disable outer join fetching if this loader obtains an
- * upgrade lock mode
- */
- protected boolean isJoinedFetchEnabled(AssociationType type, FetchMode config, CascadeStyle cascadeStyle) {
- return lockMode.greaterThan(LockMode.READ) ?
- false :
- super.isJoinedFetchEnabled(type, config, cascadeStyle);
+ protected int getJoinType(
+ OuterJoinLoadable persister,
+ String path,
+ int propertyNumber,
+ AssociationType associationType,
+ FetchMode metadataFetchMode,
+ CascadeStyle metadataCascadeStyle,
+ String lhsTable,
+ String[] lhsColumns,
+ boolean nullable,
+ int currentDepth) throws MappingException {
+ // NOTE : we override this form here specifically to account for
+ // fetch profiles.
+ // TODO : how to best handle criteria queries?
+ if ( lockMode.greaterThan( LockMode.READ ) ) {
+ return -1;
+ }
+ if ( isTooDeep( currentDepth )
+ || ( associationType.isCollectionType() && isTooManyCollections() ) ) {
+ return -1;
+ }
+ if ( !isJoinedFetchEnabledInMapping( metadataFetchMode, associationType )
+ && !isJoinFetchEnabledByProfile( persister, path, propertyNumber ) ) {
+ return -1;
+ }
+ if ( isDuplicateAssociation( lhsTable, lhsColumns, associationType ) ) {
+ return -1;
+ }
+ return getJoinType( nullable, currentDepth );
}
public String getComment() {
Modified: core/trunk/core/src/main/java/org/hibernate/loader/entity/EntityLoader.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/loader/entity/EntityLoader.java 2008-08-15 21:03:38 UTC (rev 15090)
+++ core/trunk/core/src/main/java/org/hibernate/loader/entity/EntityLoader.java 2008-08-15 21:20:15 UTC (rev 15091)
@@ -25,12 +25,14 @@
package org.hibernate.loader.entity;
import java.util.Map;
+import java.util.Set;
import org.hibernate.HibernateException;
import org.hibernate.LockMode;
import org.hibernate.MappingException;
import org.hibernate.engine.SessionFactoryImplementor;
import org.hibernate.engine.SessionImplementor;
+import org.hibernate.engine.LoadQueryInfluencers;
import org.hibernate.loader.JoinWalker;
import org.hibernate.persister.entity.OuterJoinLoadable;
import org.hibernate.type.Type;
@@ -51,9 +53,8 @@
OuterJoinLoadable persister,
LockMode lockMode,
SessionFactoryImplementor factory,
- Map enabledFilters)
- throws MappingException {
- this(persister, 1, lockMode, factory, enabledFilters);
+ LoadQueryInfluencers loadQueryInfluencers) throws MappingException {
+ this( persister, 1, lockMode, factory, loadQueryInfluencers );
}
public EntityLoader(
@@ -61,16 +62,15 @@
int batchSize,
LockMode lockMode,
SessionFactoryImplementor factory,
- Map enabledFilters)
- throws MappingException {
- this(
- persister,
+ LoadQueryInfluencers loadQueryInfluencers) throws MappingException {
+ this(
+ persister,
persister.getIdentifierColumnNames(),
persister.getIdentifierType(),
batchSize,
lockMode,
factory,
- enabledFilters
+ loadQueryInfluencers
);
}
@@ -81,9 +81,8 @@
int batchSize,
LockMode lockMode,
SessionFactoryImplementor factory,
- Map enabledFilters)
- throws MappingException {
- super(persister, uniqueKeyType, factory, enabledFilters);
+ LoadQueryInfluencers loadQueryInfluencers) throws MappingException {
+ super( persister, uniqueKeyType, factory, loadQueryInfluencers );
JoinWalker walker = new EntityJoinWalker(
persister,
@@ -91,8 +90,8 @@
batchSize,
lockMode,
factory,
- enabledFilters
- );
+ loadQueryInfluencers
+ );
initFromWalker( walker );
postInstantiate();
@@ -103,9 +102,10 @@
}
- public Object loadByUniqueKey(SessionImplementor session, Object key)
- throws HibernateException {
- return load(session, key, null, null);
+ public Object loadByUniqueKey(
+ SessionImplementor session,
+ Object key) throws HibernateException {
+ return load( session, key, null, null );
}
protected boolean isSingleRowLoader() {
Added: core/trunk/core/src/main/java/org/hibernate/mapping/FetchProfile.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/mapping/FetchProfile.java (rev 0)
+++ core/trunk/core/src/main/java/org/hibernate/mapping/FetchProfile.java 2008-08-15 21:20:15 UTC (rev 15091)
@@ -0,0 +1,101 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
+ * indicated by the @author tags or express copyright attribution
+ * statements applied by the authors. All third-party contributions are
+ * distributed under license by Red Hat Middleware LLC.
+ *
+ * This copyrighted material is made available to anyone wishing to use, modify,
+ * copy, or redistribute it subject to the terms and conditions of the GNU
+ * Lesser General Public License, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this distribution; if not, write to:
+ * Free Software Foundation, Inc.
+ * 51 Franklin Street, Fifth Floor
+ * Boston, MA 02110-1301 USA
+ *
+ */
+package org.hibernate.mapping;
+
+import java.util.LinkedHashSet;
+
+/**
+ * A fetch profile allows a user to dynamically modify the fetching
+ * strategy used for particular associations at runtime, whereas that
+ * information was historically only statically defined in the metadata.
+ *
+ * @author Steve Ebersole
+ */
+public class FetchProfile {
+ private final String name;
+ private LinkedHashSet fetches = new LinkedHashSet();
+
+ public FetchProfile(String name) {
+ this.name = name;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public LinkedHashSet getFetches() {
+ return fetches;
+ }
+
+ public void addFetch(String entity, String association, String style) {
+ fetches.add( new Fetch( entity, association, style ) );
+ }
+
+ public boolean equals(Object o) {
+ if ( this == o ) {
+ return true;
+ }
+ if ( o == null || getClass() != o.getClass() ) {
+ return false;
+ }
+
+ FetchProfile that = ( FetchProfile ) o;
+
+ return name.equals( that.name );
+
+ }
+
+ public int hashCode() {
+ return name.hashCode();
+ }
+
+
+ /**
+ * Defines an individual association fetch within the given profile.
+ */
+ public static class Fetch {
+ private final String entity;
+ private final String association;
+ private final String style;
+
+ public Fetch(String entity, String association, String style) {
+ this.entity = entity;
+ this.association = association;
+ this.style = style;
+ }
+
+ public String getEntity() {
+ return entity;
+ }
+
+ public String getAssociation() {
+ return association;
+ }
+
+ public String getStyle() {
+ return style;
+ }
+ }
+}
Modified: core/trunk/core/src/main/java/org/hibernate/persister/collection/AbstractCollectionPersister.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/persister/collection/AbstractCollectionPersister.java 2008-08-15 21:03:38 UTC (rev 15090)
+++ core/trunk/core/src/main/java/org/hibernate/persister/collection/AbstractCollectionPersister.java 2008-08-15 21:20:15 UTC (rev 15091)
@@ -58,6 +58,7 @@
import org.hibernate.engine.SessionImplementor;
import org.hibernate.engine.SubselectFetch;
import org.hibernate.engine.ExecuteUpdateResultCheckStyle;
+import org.hibernate.engine.LoadQueryInfluencers;
import org.hibernate.exception.JDBCExceptionHelper;
import org.hibernate.exception.SQLExceptionConverter;
import org.hibernate.id.IdentifierGenerator;
@@ -561,7 +562,7 @@
public void postInstantiate() throws MappingException {
initializer = queryLoaderName == null ?
- createCollectionInitializer( CollectionHelper.EMPTY_MAP ) :
+ createCollectionInitializer( LoadQueryInfluencers.NONE ) :
new NamedQueryCollectionInitializer( queryLoaderName, this );
}
@@ -601,7 +602,7 @@
return initializer;
}
else {
- return createCollectionInitializer( session.getEnabledFilters() );
+ return createCollectionInitializer( session.getLoadQueryInfluencers() );
}
}
@@ -637,7 +638,7 @@
protected abstract CollectionInitializer createSubselectInitializer(SubselectFetch subselect, SessionImplementor session);
- protected abstract CollectionInitializer createCollectionInitializer(Map enabledFilters)
+ protected abstract CollectionInitializer createCollectionInitializer(LoadQueryInfluencers loadQueryInfluencers)
throws MappingException;
public CollectionRegionAccessStrategy getCacheAccessStrategy() {
Modified: core/trunk/core/src/main/java/org/hibernate/persister/collection/BasicCollectionPersister.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/persister/collection/BasicCollectionPersister.java 2008-08-15 21:03:38 UTC (rev 15090)
+++ core/trunk/core/src/main/java/org/hibernate/persister/collection/BasicCollectionPersister.java 2008-08-15 21:20:15 UTC (rev 15091)
@@ -42,6 +42,7 @@
import org.hibernate.engine.SessionFactoryImplementor;
import org.hibernate.engine.SessionImplementor;
import org.hibernate.engine.SubselectFetch;
+import org.hibernate.engine.LoadQueryInfluencers;
import org.hibernate.exception.JDBCExceptionHelper;
import org.hibernate.loader.collection.BatchingCollectionInitializer;
import org.hibernate.loader.collection.CollectionInitializer;
@@ -315,9 +316,9 @@
*
* @see org.hibernate.loader.collection.BasicCollectionLoader
*/
- protected CollectionInitializer createCollectionInitializer(java.util.Map enabledFilters)
+ protected CollectionInitializer createCollectionInitializer(LoadQueryInfluencers loadQueryInfluencers)
throws MappingException {
- return BatchingCollectionInitializer.createBatchingCollectionInitializer( this, batchSize, getFactory(), enabledFilters );
+ return BatchingCollectionInitializer.createBatchingCollectionInitializer( this, batchSize, getFactory(), loadQueryInfluencers );
}
public String fromJoinFragment(String alias, boolean innerJoin, boolean includeSubclasses) {
@@ -336,8 +337,8 @@
subselect.getQueryParameters(),
subselect.getNamedParameterLocMap(),
session.getFactory(),
- session.getEnabledFilters()
- );
+ session.getLoadQueryInfluencers()
+ );
}
}
Modified: core/trunk/core/src/main/java/org/hibernate/persister/collection/OneToManyPersister.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/persister/collection/OneToManyPersister.java 2008-08-15 21:03:38 UTC (rev 15090)
+++ core/trunk/core/src/main/java/org/hibernate/persister/collection/OneToManyPersister.java 2008-08-15 21:20:15 UTC (rev 15091)
@@ -40,6 +40,7 @@
import org.hibernate.engine.SessionFactoryImplementor;
import org.hibernate.engine.SessionImplementor;
import org.hibernate.engine.SubselectFetch;
+import org.hibernate.engine.LoadQueryInfluencers;
import org.hibernate.exception.JDBCExceptionHelper;
import org.hibernate.loader.collection.BatchingCollectionInitializer;
import org.hibernate.loader.collection.CollectionInitializer;
@@ -338,8 +339,9 @@
*
* @see org.hibernate.loader.collection.OneToManyLoader
*/
- protected CollectionInitializer createCollectionInitializer(java.util.Map enabledFilters) throws MappingException {
- return BatchingCollectionInitializer.createBatchingOneToManyInitializer( this, batchSize, getFactory(), enabledFilters );
+ protected CollectionInitializer createCollectionInitializer(LoadQueryInfluencers loadQueryInfluencers)
+ throws MappingException {
+ return BatchingCollectionInitializer.createBatchingOneToManyInitializer( this, batchSize, getFactory(), loadQueryInfluencers );
}
public String fromJoinFragment(String alias,
@@ -375,12 +377,12 @@
subselect.getQueryParameters(),
subselect.getNamedParameterLocMap(),
session.getFactory(),
- session.getEnabledFilters()
+ session.getLoadQueryInfluencers()
);
}
public Object getElementByIndex(Serializable key, Object index, SessionImplementor session, Object owner) {
- return new CollectionElementLoader( this, getFactory(), session.getEnabledFilters() )
+ return new CollectionElementLoader( this, getFactory(), session.getLoadQueryInfluencers() )
.loadElement( session, key, incrementIndexByBase(index) );
}
Modified: core/trunk/core/src/main/java/org/hibernate/persister/entity/AbstractEntityPersister.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/persister/entity/AbstractEntityPersister.java 2008-08-15 21:03:38 UTC (rev 15090)
+++ core/trunk/core/src/main/java/org/hibernate/persister/entity/AbstractEntityPersister.java 2008-08-15 21:20:15 UTC (rev 15091)
@@ -52,7 +52,6 @@
import org.hibernate.jdbc.Expectations;
import org.hibernate.jdbc.TooManyRowsAffectedException;
import org.hibernate.dialect.lock.LockingStrategy;
-import org.hibernate.cache.CacheConcurrencyStrategy;
import org.hibernate.cache.CacheKey;
import org.hibernate.cache.access.EntityRegionAccessStrategy;
import org.hibernate.cache.entry.CacheEntry;
@@ -69,6 +68,7 @@
import org.hibernate.engine.ExecuteUpdateResultCheckStyle;
import org.hibernate.engine.EntityKey;
import org.hibernate.engine.ValueInclusion;
+import org.hibernate.engine.LoadQueryInfluencers;
import org.hibernate.exception.JDBCExceptionHelper;
import org.hibernate.id.IdentifierGenerator;
import org.hibernate.id.PostInsertIdentifierGenerator;
@@ -109,7 +109,6 @@
import org.hibernate.type.TypeFactory;
import org.hibernate.type.VersionType;
import org.hibernate.util.ArrayHelper;
-import org.hibernate.util.CollectionHelper;
import org.hibernate.util.FilterHelper;
import org.hibernate.util.StringHelper;
@@ -196,6 +195,8 @@
// dynamic filters attached to the class-level
private final FilterHelper filterHelper;
+ private final Set affectingFetchProfileNames = new HashSet();
+
private final Map uniqueKeyLoaders = new HashMap();
private final Map lockers = new HashMap();
private final Map loaders = new HashMap();
@@ -1667,26 +1668,27 @@
}
- public Object loadByUniqueKey(String propertyName, Object uniqueKey, SessionImplementor session)
- throws HibernateException {
- return getAppropriateUniqueKeyLoader( propertyName, session.getEnabledFilters() )
- .loadByUniqueKey( session, uniqueKey );
+ public Object loadByUniqueKey(
+ String propertyName,
+ Object uniqueKey,
+ SessionImplementor session) throws HibernateException {
+ return getAppropriateUniqueKeyLoader( propertyName, session ).loadByUniqueKey( session, uniqueKey );
}
- private EntityLoader getAppropriateUniqueKeyLoader(String propertyName, Map enabledFilters) {
-
- final boolean useStaticLoader = ( enabledFilters == null || enabledFilters.isEmpty() )
+ private EntityLoader getAppropriateUniqueKeyLoader(String propertyName, SessionImplementor session) {
+ final boolean useStaticLoader = !session.getLoadQueryInfluencers().hasEnabledFilters()
+ && !session.getLoadQueryInfluencers().hasEnabledFetchProfiles()
&& propertyName.indexOf('.')<0; //ugly little workaround for fact that createUniqueKeyLoaders() does not handle component properties
if ( useStaticLoader ) {
- return (EntityLoader) uniqueKeyLoaders.get( propertyName );
+ return ( EntityLoader ) uniqueKeyLoaders.get( propertyName );
}
else {
return createUniqueKeyLoader(
- propertyMapping.toType(propertyName),
- propertyMapping.toColumns(propertyName),
- enabledFilters
- );
+ propertyMapping.toType( propertyName ),
+ propertyMapping.toColumns( propertyName ),
+ session.getLoadQueryInfluencers()
+ );
}
}
@@ -1705,21 +1707,31 @@
createUniqueKeyLoader(
propertyTypes[i],
getPropertyColumnNames( i ),
- CollectionHelper.EMPTY_MAP
- )
- );
+ LoadQueryInfluencers.NONE
+ )
+ );
//TODO: create uk loaders for component properties
}
}
}
- private EntityLoader createUniqueKeyLoader(Type uniqueKeyType, String[] columns, Map enabledFilters) {
+ private EntityLoader createUniqueKeyLoader(
+ Type uniqueKeyType,
+ String[] columns,
+ LoadQueryInfluencers loadQueryInfluencers) {
if ( uniqueKeyType.isEntityType() ) {
String className = ( ( EntityType ) uniqueKeyType ).getAssociatedEntityName();
uniqueKeyType = getFactory().getEntityPersister( className ).getIdentifierType();
}
-
- return new EntityLoader( this, columns, uniqueKeyType, 1, LockMode.NONE, getFactory(), enabledFilters );
+ return new EntityLoader(
+ this,
+ columns,
+ uniqueKeyType,
+ 1,
+ LockMode.NONE,
+ getFactory(),
+ loadQueryInfluencers
+ );
}
protected String getSQLWhereString(String alias) {
@@ -1770,13 +1782,21 @@
}
}
- protected UniqueEntityLoader createEntityLoader(LockMode lockMode, Map enabledFilters) throws MappingException {
+ protected UniqueEntityLoader createEntityLoader(
+ LockMode lockMode,
+ LoadQueryInfluencers loadQueryInfluencers) throws MappingException {
//TODO: disable batch loading if lockMode > READ?
- return BatchingEntityLoader.createBatchingEntityLoader( this, batchSize, lockMode, getFactory(), enabledFilters );
+ return BatchingEntityLoader.createBatchingEntityLoader(
+ this,
+ batchSize,
+ lockMode,
+ getFactory(),
+ loadQueryInfluencers
+ );
}
protected UniqueEntityLoader createEntityLoader(LockMode lockMode) throws MappingException {
- return createEntityLoader( lockMode, CollectionHelper.EMPTY_MAP );
+ return createEntityLoader( lockMode, LoadQueryInfluencers.NONE );
}
protected boolean check(int rows, Serializable id, int tableNumber, Expectation expectation, PreparedStatement statement) throws HibernateException {
@@ -3072,21 +3092,49 @@
return loader.load( id, optionalObject, session );
}
+ public void registerAffectingFetchProfile(String fetchProfileName) {
+ affectingFetchProfileNames.add( fetchProfileName );
+ }
+
+ private boolean isAffectedByEnabledFetchProfiles(SessionImplementor session) {
+ Iterator itr = session.getLoadQueryInfluencers().getEnabledFetchProfileNames().iterator();
+ while ( itr.hasNext() ) {
+ if ( affectingFetchProfileNames.contains( itr.next() ) ) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private boolean isAffectedByEnabledFilters(SessionImplementor session) {
+ return session.getLoadQueryInfluencers().hasEnabledFilters()
+ && filterHelper.isAffectedBy( session.getLoadQueryInfluencers().getEnabledFilters() );
+ }
+
private UniqueEntityLoader getAppropriateLoader(LockMode lockMode, SessionImplementor session) {
- final Map enabledFilters = session.getEnabledFilters();
if ( queryLoader != null ) {
+ // if the user specified a custom query loader we need to that
+ // regardless of any other consideration
return queryLoader;
}
- else if ( enabledFilters == null || enabledFilters.isEmpty() ) {
- if ( session.getFetchProfile()!=null && LockMode.UPGRADE.greaterThan(lockMode) ) {
- return (UniqueEntityLoader) loaders.get( session.getFetchProfile() );
- }
- else {
- return (UniqueEntityLoader) loaders.get( lockMode );
- }
+ else if ( isAffectedByEnabledFilters( session ) ) {
+ // because filters affect the rows returned (because they add
+ // restirctions) these need to be next in precendence
+ return createEntityLoader( lockMode, session.getLoadQueryInfluencers() );
}
+ else if ( session.getLoadQueryInfluencers().getInternalFetchProfile() != null && LockMode.UPGRADE.greaterThan( lockMode ) ) {
+ // Next, we consider whether an 'internal' fetch profile has been set.
+ // This indicates a special fetch profile Hibernate needs applied
+ // (for its merge loading process e.g.).
+ return ( UniqueEntityLoader ) loaders.get( session.getLoadQueryInfluencers().getInternalFetchProfile() );
+ }
+ else if ( isAffectedByEnabledFetchProfiles( session ) ) {
+ // If the session has associated influencers we need to adjust the
+ // SQL query used for loading based on those influencers
+ return createEntityLoader( lockMode, session.getLoadQueryInfluencers() );
+ }
else {
- return createEntityLoader( lockMode, enabledFilters );
+ return ( UniqueEntityLoader ) loaders.get( lockMode );
}
}
Modified: core/trunk/core/src/main/java/org/hibernate/persister/entity/Loadable.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/persister/entity/Loadable.java 2008-08-15 21:03:38 UTC (rev 15090)
+++ core/trunk/core/src/main/java/org/hibernate/persister/entity/Loadable.java 2008-08-15 21:20:15 UTC (rev 15091)
@@ -108,4 +108,12 @@
public boolean isAbstract();
+ /**
+ * Register the name of a fetch profile determined to have an affect on the
+ * underlying loadable in regards to the fact that the underlying load SQL
+ * needs to be adjust when the given fetch profile is enabled.
+ *
+ * @param fetchProfileName The name of the profile affecting this.
+ */
+ public void registerAffectingFetchProfile(String fetchProfileName);
}
Modified: core/trunk/core/src/main/resources/org/hibernate/hibernate-mapping-3.0.dtd
===================================================================
--- core/trunk/core/src/main/resources/org/hibernate/hibernate-mapping-3.0.dtd 2008-08-15 21:03:38 UTC (rev 15090)
+++ core/trunk/core/src/main/resources/org/hibernate/hibernate-mapping-3.0.dtd 2008-08-15 21:20:15 UTC (rev 15091)
@@ -19,11 +19,12 @@
<!ELEMENT hibernate-mapping (
meta*,
typedef*,
- import*,
+ import*,
(class|subclass|joined-subclass|union-subclass)*,
resultset*,
(query|sql-query)*,
filter-def*,
+ fetch-profile*,
database-object*
)>
<!ATTLIST hibernate-mapping schema CDATA #IMPLIED> <!-- default: none -->
@@ -78,6 +79,7 @@
((join*,subclass*)|joined-subclass*|union-subclass*),
loader?,sql-insert?,sql-update?,sql-delete?,
filter*,
+ fetch-profile*,
resultset*,
(query|sql-query)*
)>
@@ -133,7 +135,23 @@
<!ATTLIST filter name CDATA #REQUIRED>
<!ATTLIST filter condition CDATA #IMPLIED>
+<!--
+-->
+<!ELEMENT fetch-profile (fetch*)>
+ <!ATTLIST fetch-profile name CDATA #REQUIRED>
+<!--
+ The <fetch> element defines a single path to which the fetch
+ refers, as well as the style of fetch to apply. The 'root' of the
+ path is different depending upon the context in which the
+ containing <fetch-profile/> occurs; within a <class/> element,
+ the entity-name of the containing class mapping is assumed...
+-->
+<!ELEMENT fetch EMPTY>
+ <!ATTLIST fetch entity CDATA #IMPLIED> <!-- Implied as long as the containing fetch profile is contained in a class mapping -->
+ <!ATTLIST fetch association CDATA #REQUIRED>
+ <!ATTLIST fetch style (join|select) "join">
+
<!-- A join allows some properties of a class to be persisted to a second table -->
<!ELEMENT join (
@@ -231,6 +249,7 @@
join*,
subclass*,
loader?,sql-insert?,sql-update?,sql-delete?,
+ fetch-profile*,
resultset*,
(query|sql-query)*
)>
@@ -263,6 +282,7 @@
(property|many-to-one|one-to-one|component|dynamic-component|properties|any|map|set|list|bag|idbag|array|primitive-array)*,
joined-subclass*,
loader?,sql-insert?,sql-update?,sql-delete?,
+ fetch-profile*,
resultset*,
(query|sql-query)*
)>
@@ -298,6 +318,7 @@
(property|many-to-one|one-to-one|component|dynamic-component|properties|any|map|set|list|bag|idbag|array|primitive-array)*,
union-subclass*,
loader?,sql-insert?,sql-update?,sql-delete?,
+ fetch-profile*,
resultset*,
(query|sql-query)*
)>
Modified: core/trunk/jmx/src/main/java/org/hibernate/jmx/SessionFactoryStub.java
===================================================================
--- core/trunk/jmx/src/main/java/org/hibernate/jmx/SessionFactoryStub.java 2008-08-15 21:03:38 UTC (rev 15090)
+++ core/trunk/jmx/src/main/java/org/hibernate/jmx/SessionFactoryStub.java 2008-08-15 21:20:15 UTC (rev 15091)
@@ -198,4 +198,8 @@
public FilterDefinition getFilterDefinition(String filterName) throws HibernateException {
return getImpl().getFilterDefinition( filterName );
}
+
+ public boolean containsFetchProfileDefition(String name) {
+ return getImpl().containsFetchProfileDefition( name );
+ }
}
Added: core/trunk/testsuite/src/test/java/org/hibernate/test/fetchprofiles/basic/BasicFetchProfileTest.java
===================================================================
--- core/trunk/testsuite/src/test/java/org/hibernate/test/fetchprofiles/basic/BasicFetchProfileTest.java (rev 0)
+++ core/trunk/testsuite/src/test/java/org/hibernate/test/fetchprofiles/basic/BasicFetchProfileTest.java 2008-08-15 21:20:15 UTC (rev 15091)
@@ -0,0 +1,281 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
+ * indicated by the @author tags or express copyright attribution
+ * statements applied by the authors. All third-party contributions are
+ * distributed under license by Red Hat Middleware LLC.
+ *
+ * This copyrighted material is made available to anyone wishing to use, modify,
+ * copy, or redistribute it subject to the terms and conditions of the GNU
+ * Lesser General Public License, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this distribution; if not, write to:
+ * Free Software Foundation, Inc.
+ * 51 Franklin Street, Fifth Floor
+ * Boston, MA 02110-1301 USA
+ *
+ */
+package org.hibernate.test.fetchprofiles.basic;
+
+import org.hibernate.junit.functional.FunctionalTestCase;
+import org.hibernate.Session;
+import org.hibernate.Hibernate;
+import org.hibernate.UnknownProfileException;
+import org.hibernate.cfg.Configuration;
+import org.hibernate.cfg.Environment;
+import org.hibernate.engine.SessionImplementor;
+
+/**
+ * TODO : javadoc
+ *
+ * @author Steve Ebersole
+ */
+public class BasicFetchProfileTest extends FunctionalTestCase {
+ public BasicFetchProfileTest(String string) {
+ super( string );
+ }
+
+ public String[] getMappings() {
+ return new String[] { "fetchprofiles/basic/Mappings.hbm.xml" };
+ }
+
+ public String getCacheConcurrencyStrategy() {
+ return null;
+ }
+
+ public void configure(Configuration cfg) {
+ cfg.setProperty( Environment.GENERATE_STATISTICS, "true" );
+ }
+
+ private static interface TestData {
+ public Long getStudentId();
+ public Long getDepartmentId();
+ public Long getCourseId();
+ public Long getSectionId();
+ public Long getEnrollmentId();
+ }
+
+ private interface TestCode {
+ public void perform(TestData data);
+ }
+
+ private void performWithStandardData(TestCode testCode) {
+ Session session = openSession();
+ session.beginTransaction();
+ final Department literatureDepartment = new Department( "lit", "Literature" );
+ session.save( literatureDepartment );
+ final Course lit101 = new Course( new Course.Code( literatureDepartment, 101 ), "Introduction to Literature" );
+ session.save( lit101 );
+ final CourseOffering section = new CourseOffering( lit101, 1, 2008 );
+ session.save( section );
+ final Student me = new Student( "Steve" );
+ session.save( me );
+ final Enrollment enrollment = new Enrollment( section, me );
+ section.getEnrollments().add( enrollment );
+ session.save( enrollment );
+ session.getTransaction().commit();
+ session.close();
+
+ sfi().getStatistics().clear();
+
+ testCode.perform(
+ new TestData() {
+ public Long getStudentId() {
+ return me.getId();
+ }
+
+ public Long getDepartmentId() {
+ return literatureDepartment.getId();
+ }
+
+ public Long getCourseId() {
+ return lit101.getId();
+ }
+
+ public Long getSectionId() {
+ return section.getId();
+ }
+
+ public Long getEnrollmentId() {
+ return enrollment.getId();
+ }
+ }
+ );
+
+ session = openSession();
+ session.beginTransaction();
+ session.delete( enrollment );
+ session.delete( me );
+ session.delete( enrollment.getOffering() );
+ session.delete( enrollment.getOffering().getCourse() );
+ session.delete( enrollment.getOffering().getCourse().getCode().getDepartment() );
+ session.getTransaction().commit();
+ session.close();
+ }
+
+ public void testNormalLoading() {
+ performWithStandardData(
+ new TestCode() {
+ public void perform(TestData data) {
+ Session session = openSession();
+ session.beginTransaction();
+ CourseOffering section = ( CourseOffering ) session.get( CourseOffering.class, data.getSectionId() );
+ assertEquals( 1, sfi().getStatistics().getEntityLoadCount() );
+ assertEquals( 0, sfi().getStatistics().getEntityFetchCount() );
+ assertFalse( Hibernate.isInitialized( section.getCourse() ) );
+ assertFalse( Hibernate.isInitialized( section.getEnrollments() ) );
+ assertFalse( Hibernate.isInitialized( section.getCourse().getCode().getDepartment() ) );
+ assertTrue( Hibernate.isInitialized( section.getCourse() ) );
+ assertEquals( 1, sfi().getStatistics().getEntityFetchCount() );
+ session.getTransaction().commit();
+ session.close();
+ }
+ }
+ );
+ }
+
+ public void testNormalCriteria() {
+ performWithStandardData(
+ new TestCode() {
+ public void perform(TestData data) {
+ Session session = openSession();
+ session.beginTransaction();
+ CourseOffering section = ( CourseOffering ) session.createCriteria( CourseOffering.class ).uniqueResult();
+ assertEquals( 1, sfi().getStatistics().getEntityLoadCount() );
+ assertEquals( 0, sfi().getStatistics().getEntityFetchCount() );
+ assertFalse( Hibernate.isInitialized( section.getCourse() ) );
+ assertFalse( Hibernate.isInitialized( section.getEnrollments() ) );
+ assertFalse( Hibernate.isInitialized( section.getCourse().getCode().getDepartment() ) );
+ assertTrue( Hibernate.isInitialized( section.getCourse() ) );
+ assertEquals( 1, sfi().getStatistics().getEntityFetchCount() );
+ session.getTransaction().commit();
+ session.close();
+ }
+ }
+ );
+ }
+
+ public void testBasicFetchProfileOperation() {
+ assertTrue( "fetch profile not parsed properly", sfi().containsFetchProfileDefition( "enrollment.details" ) );
+ assertTrue( "fetch profile not parsed properly", sfi().containsFetchProfileDefition( "offering.details" ) );
+ assertTrue( "fetch profile not parsed properly", sfi().containsFetchProfileDefition( "course.details" ) );
+ Session s = openSession();
+ SessionImplementor si = ( SessionImplementor ) s;
+ s.enableFetchProfile( "enrollment.details" );
+ assertTrue( si.getLoadQueryInfluencers().hasEnabledFetchProfiles() );
+ s.disableFetchProfile( "enrollment.details" );
+ assertFalse( si.getLoadQueryInfluencers().hasEnabledFetchProfiles() );
+ try {
+ s.enableFetchProfile( "never-gonna-get-it" );
+ fail( "expecting failure on undefined fetch-profile" );
+ }
+ catch ( UnknownProfileException expected ) {
+ }
+ s.close();
+ }
+
+ public void testLoadManyToOneFetchProfile() {
+ performWithStandardData(
+ new TestCode() {
+ public void perform(TestData data) {
+ Session session = openSession();
+ session.beginTransaction();
+ session.enableFetchProfile( "enrollment.details" );
+ Enrollment enrollment = ( Enrollment ) session.get( Enrollment.class, data.getEnrollmentId() );
+ assertEquals( 3, sfi().getStatistics().getEntityLoadCount() ); // enrollment + (section + student)
+ assertEquals( 0, sfi().getStatistics().getEntityFetchCount() );
+ assertTrue( Hibernate.isInitialized( enrollment.getOffering() ) );
+ assertTrue( Hibernate.isInitialized( enrollment.getStudent() ) );
+ assertEquals( 0, sfi().getStatistics().getEntityFetchCount() );
+ session.getTransaction().commit();
+ session.close();
+ }
+ }
+ );
+ }
+
+ public void testCriteriaManyToOneFetchProfile() {
+ performWithStandardData(
+ new TestCode() {
+ public void perform(TestData data) {
+ Session session = openSession();
+ session.beginTransaction();
+ session.enableFetchProfile( "enrollment.details" );
+ Enrollment enrollment = ( Enrollment ) session.createCriteria( Enrollment.class ).uniqueResult();
+ assertEquals( 3, sfi().getStatistics().getEntityLoadCount() ); // enrollment + (section + student)
+ assertEquals( 0, sfi().getStatistics().getEntityFetchCount() );
+ assertTrue( Hibernate.isInitialized( enrollment.getOffering() ) );
+ assertTrue( Hibernate.isInitialized( enrollment.getStudent() ) );
+ assertEquals( 0, sfi().getStatistics().getEntityFetchCount() );
+ session.getTransaction().commit();
+ session.close();
+ }
+ }
+ );
+ }
+
+ public void testLoadOneToManyFetchProfile() {
+ performWithStandardData(
+ new TestCode() {
+ public void perform(TestData data) {
+ Session session = openSession();
+ session.beginTransaction();
+ session.enableFetchProfile( "offering.details" );
+ CourseOffering section = ( CourseOffering ) session.get( CourseOffering.class, data.getSectionId() );
+ assertEquals( 3, sfi().getStatistics().getEntityLoadCount() ); // section + (enrollments + course)
+ assertEquals( 0, sfi().getStatistics().getEntityFetchCount() );
+ assertTrue( Hibernate.isInitialized( section.getEnrollments() ) );
+ session.getTransaction().commit();
+ session.close();
+ }
+ }
+ );
+ }
+
+ public void testLoadDeepFetchProfile() {
+ performWithStandardData(
+ new TestCode() {
+ public void perform(TestData data) {
+ Session session = openSession();
+ session.beginTransaction();
+ // enable both enrollment and offering detail profiles;
+ // then loading the section/offering should fetch the enrollment
+ // which in turn should fetch student (+ offering).
+ session.enableFetchProfile( "offering.details" );
+ session.enableFetchProfile( "enrollment.details" );
+ CourseOffering section = ( CourseOffering ) session.get( CourseOffering.class, data.getSectionId() );
+ assertEquals( 4, sfi().getStatistics().getEntityLoadCount() ); // section + (course + enrollments + (student))
+ assertEquals( 0, sfi().getStatistics().getEntityFetchCount() );
+ assertTrue( Hibernate.isInitialized( section.getEnrollments() ) );
+ session.getTransaction().commit();
+ session.close();
+ }
+ }
+ );
+ }
+
+ public void testLoadComponentDerefFetchProfile() {
+ performWithStandardData(
+ new TestCode() {
+ public void perform(TestData data) {
+ Session session = openSession();
+ session.beginTransaction();
+ session.enableFetchProfile( "course.details" );
+ Course course = ( Course ) session.get( Course.class, data.getCourseId() );
+ assertEquals( 2, sfi().getStatistics().getEntityLoadCount() ); // course + department
+ assertEquals( 0, sfi().getStatistics().getEntityFetchCount() );
+ assertTrue( Hibernate.isInitialized( course.getCode().getDepartment() ) );
+ session.getTransaction().commit();
+ session.close();
+ }
+ }
+ );
+ }
+}
Added: core/trunk/testsuite/src/test/java/org/hibernate/test/fetchprofiles/basic/Course.java
===================================================================
--- core/trunk/testsuite/src/test/java/org/hibernate/test/fetchprofiles/basic/Course.java (rev 0)
+++ core/trunk/testsuite/src/test/java/org/hibernate/test/fetchprofiles/basic/Course.java 2008-08-15 21:20:15 UTC (rev 15091)
@@ -0,0 +1,123 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
+ * indicated by the @author tags or express copyright attribution
+ * statements applied by the authors. All third-party contributions are
+ * distributed under license by Red Hat Middleware LLC.
+ *
+ * This copyrighted material is made available to anyone wishing to use, modify,
+ * copy, or redistribute it subject to the terms and conditions of the GNU
+ * Lesser General Public License, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this distribution; if not, write to:
+ * Free Software Foundation, Inc.
+ * 51 Franklin Street, Fifth Floor
+ * Boston, MA 02110-1301 USA
+ *
+ */
+package org.hibernate.test.fetchprofiles.basic;
+
+/**
+ * TODO : javadoc
+ *
+ * @author Steve Ebersole
+ */
+public class Course {
+ private Long id;
+ private Code code;
+ private String name;
+
+ public Course() {
+ }
+
+ public Course(Code code, String name) {
+ this.code = code;
+ this.name = name;
+ }
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public Code getCode() {
+ return code;
+ }
+
+ public void setCode(Code code) {
+ this.code = code;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+ public static class Code {
+ private Department department;
+ private int number;
+
+ public Code() {
+ }
+
+ public Code(Department department, int number) {
+ this.department = department;
+ this.number = number;
+ }
+
+ public Department getDepartment() {
+ return department;
+ }
+
+ public void setDepartment(Department department) {
+ this.department = department;
+ }
+
+ public int getNumber() {
+ return number;
+ }
+
+ public void setNumber(int number) {
+ this.number = number;
+ }
+
+ public boolean equals(Object o) {
+ if ( this == o ) {
+ return true;
+ }
+ if ( !( o instanceof Code ) ) {
+ return false;
+ }
+
+ Code code = ( Code ) o;
+
+ if ( number != code.number ) {
+ return false;
+ }
+ if ( !department.equals( code.department ) ) {
+ return false;
+ }
+
+ return true;
+ }
+
+ public int hashCode() {
+ int result;
+ result = department.hashCode();
+ result = 31 * result + number;
+ return result;
+ }
+ }
+}
Added: core/trunk/testsuite/src/test/java/org/hibernate/test/fetchprofiles/basic/CourseOffering.java
===================================================================
--- core/trunk/testsuite/src/test/java/org/hibernate/test/fetchprofiles/basic/CourseOffering.java (rev 0)
+++ core/trunk/testsuite/src/test/java/org/hibernate/test/fetchprofiles/basic/CourseOffering.java 2008-08-15 21:20:15 UTC (rev 15091)
@@ -0,0 +1,90 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
+ * indicated by the @author tags or express copyright attribution
+ * statements applied by the authors. All third-party contributions are
+ * distributed under license by Red Hat Middleware LLC.
+ *
+ * This copyrighted material is made available to anyone wishing to use, modify,
+ * copy, or redistribute it subject to the terms and conditions of the GNU
+ * Lesser General Public License, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this distribution; if not, write to:
+ * Free Software Foundation, Inc.
+ * 51 Franklin Street, Fifth Floor
+ * Boston, MA 02110-1301 USA
+ *
+ */
+package org.hibernate.test.fetchprofiles.basic;
+
+import java.util.Set;
+import java.util.HashSet;
+
+/**
+ * TODO : javadoc
+ *
+ * @author Steve Ebersole
+ */
+public class CourseOffering {
+ private Long id;
+ private Course course;
+ private int semester;
+ private int year;
+ private Set enrollments = new HashSet();
+
+ public CourseOffering() {
+ }
+
+ public CourseOffering(Course course, int semester, int year) {
+ this.course = course;
+ this.semester = semester;
+ this.year = year;
+ }
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public Course getCourse() {
+ return course;
+ }
+
+ public void setCourse(Course course) {
+ this.course = course;
+ }
+
+ public int getSemester() {
+ return semester;
+ }
+
+ public void setSemester(int semester) {
+ this.semester = semester;
+ }
+
+ public int getYear() {
+ return year;
+ }
+
+ public void setYear(int year) {
+ this.year = year;
+ }
+
+ public Set getEnrollments() {
+ return enrollments;
+ }
+
+ public void setEnrollments(Set enrollments) {
+ this.enrollments = enrollments;
+ }
+}
Added: core/trunk/testsuite/src/test/java/org/hibernate/test/fetchprofiles/basic/Department.java
===================================================================
--- core/trunk/testsuite/src/test/java/org/hibernate/test/fetchprofiles/basic/Department.java (rev 0)
+++ core/trunk/testsuite/src/test/java/org/hibernate/test/fetchprofiles/basic/Department.java 2008-08-15 21:20:15 UTC (rev 15091)
@@ -0,0 +1,68 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
+ * indicated by the @author tags or express copyright attribution
+ * statements applied by the authors. All third-party contributions are
+ * distributed under license by Red Hat Middleware LLC.
+ *
+ * This copyrighted material is made available to anyone wishing to use, modify,
+ * copy, or redistribute it subject to the terms and conditions of the GNU
+ * Lesser General Public License, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this distribution; if not, write to:
+ * Free Software Foundation, Inc.
+ * 51 Franklin Street, Fifth Floor
+ * Boston, MA 02110-1301 USA
+ *
+ */
+package org.hibernate.test.fetchprofiles.basic;
+
+/**
+ * TODO : javadoc
+ *
+ * @author Steve Ebersole
+ */
+public class Department {
+ private Long id;
+ private String code;
+ private String name;
+
+ public Department() {
+ }
+
+ public Department(String code, String name) {
+ this.code = code;
+ this.name = name;
+ }
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getCode() {
+ return code;
+ }
+
+ public void setCode(String code) {
+ this.code = code;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
Added: core/trunk/testsuite/src/test/java/org/hibernate/test/fetchprofiles/basic/Enrollment.java
===================================================================
--- core/trunk/testsuite/src/test/java/org/hibernate/test/fetchprofiles/basic/Enrollment.java (rev 0)
+++ core/trunk/testsuite/src/test/java/org/hibernate/test/fetchprofiles/basic/Enrollment.java 2008-08-15 21:20:15 UTC (rev 15091)
@@ -0,0 +1,77 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
+ * indicated by the @author tags or express copyright attribution
+ * statements applied by the authors. All third-party contributions are
+ * distributed under license by Red Hat Middleware LLC.
+ *
+ * This copyrighted material is made available to anyone wishing to use, modify,
+ * copy, or redistribute it subject to the terms and conditions of the GNU
+ * Lesser General Public License, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this distribution; if not, write to:
+ * Free Software Foundation, Inc.
+ * 51 Franklin Street, Fifth Floor
+ * Boston, MA 02110-1301 USA
+ *
+ */
+package org.hibernate.test.fetchprofiles.basic;
+
+/**
+ * TODO : javadoc
+ *
+ * @author Steve Ebersole
+ */
+public class Enrollment {
+ private Long id;
+ private CourseOffering offering;
+ private Student student;
+ private int finalGrade;
+
+ public Enrollment() {
+ }
+
+ public Enrollment(CourseOffering offering, Student student) {
+ this.offering = offering;
+ this.student = student;
+ }
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public CourseOffering getOffering() {
+ return offering;
+ }
+
+ public void setOffering(CourseOffering offering) {
+ this.offering = offering;
+ }
+
+ public Student getStudent() {
+ return student;
+ }
+
+ public void setStudent(Student student) {
+ this.student = student;
+ }
+
+ public int getFinalGrade() {
+ return finalGrade;
+ }
+
+ public void setFinalGrade(int finalGrade) {
+ this.finalGrade = finalGrade;
+ }
+}
Added: core/trunk/testsuite/src/test/java/org/hibernate/test/fetchprofiles/basic/Mappings.hbm.xml
===================================================================
--- core/trunk/testsuite/src/test/java/org/hibernate/test/fetchprofiles/basic/Mappings.hbm.xml (rev 0)
+++ core/trunk/testsuite/src/test/java/org/hibernate/test/fetchprofiles/basic/Mappings.hbm.xml 2008-08-15 21:20:15 UTC (rev 15091)
@@ -0,0 +1,96 @@
+<?xml version="1.0"?>
+<!DOCTYPE hibernate-mapping
+ SYSTEM
+ "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
+
+<!--
+ ~ Hibernate, Relational Persistence for Idiomatic Java
+ ~
+ ~ Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
+ ~ indicated by the @author tags or express copyright attribution
+ ~ statements applied by the authors. All third-party contributions are
+ ~ distributed under license by Red Hat Middleware LLC.
+ ~
+ ~ This copyrighted material is made available to anyone wishing to use, modify,
+ ~ copy, or redistribute it subject to the terms and conditions of the GNU
+ ~ Lesser General Public License, as published by the Free Software Foundation.
+ ~
+ ~ This program is distributed in the hope that it will be useful,
+ ~ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ ~ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
+ ~ for more details.
+ ~
+ ~ You should have received a copy of the GNU Lesser General Public License
+ ~ along with this distribution; if not, write to:
+ ~ Free Software Foundation, Inc.
+ ~ 51 Franklin Street, Fifth Floor
+ ~ Boston, MA 02110-1301 USA
+ ~
+ -->
+
+<hibernate-mapping package="org.hibernate.test.fetchprofiles.basic">
+
+ <class name="Department">
+ <id name="id" type="long">
+ <generator class="increment"/>
+ </id>
+ <property name="code" column="CODE" type="string"/>
+ <property name="name" column="NAME" type="string"/>
+ </class>
+
+ <class name="Student">
+ <id name="id" type="long">
+ <generator class="increment"/>
+ </id>
+ <property name="name" column="NAME" type="string"/>
+ </class>
+
+ <class name="Course">
+ <id name="id" type="long">
+ <generator class="increment"/>
+ </id>
+ <property name="name" column="NAME" type="string"/>
+ <component name="code" class="Course$Code">
+ <many-to-one name="department" class="Department" column="DEPT_ID" cascade="save-update"/>
+ <property name="number" type="int" column="CODE_NUMBER"/>
+ </component>
+ <fetch-profile name="course.details">
+ <fetch association="code.department" style="join"/>
+ </fetch-profile>
+ </class>
+
+ <class name="CourseOffering" table="SECTION">
+ <id name="id" type="long">
+ <generator class="increment"/>
+ </id>
+ <many-to-one name="course" column="COURSE_ID" class="Course"/>
+ <property name="semester" type="int" column="SEMESTER"/>
+ <property name="year" type="int" column="YEAR"/>
+ <set name="enrollments" lazy="true" cascade="all">
+ <key column="SECTION_ID"/>
+ <one-to-many class="Enrollment"/>
+ </set>
+ <fetch-profile name="offering.details">
+ <fetch association="enrollments" style="join"/>
+ <fetch association="course" style="join"/>
+ </fetch-profile>
+ <fetch-profile name="offering.details2">
+ <fetch entity="CourseOffering" association="enrollments" style="join"/>
+ </fetch-profile>
+ </class>
+
+ <class name="Enrollment">
+ <id name="id" type="long">
+ <generator class="increment"/>
+ </id>
+ <many-to-one name="offering" column="SECTION_ID" class="CourseOffering" cascade="none"/>
+ <many-to-one name="student" column="STUDENT_ID" class="Student" cascade="none"/>
+ <property name="finalGrade" column="FINAL_GRADE" type="int"/>
+ </class>
+
+ <fetch-profile name="enrollment.details">
+ <fetch entity="Enrollment" association="student" style="join"/>
+ <fetch entity="Enrollment" association="offering" style="join"/>
+ </fetch-profile>
+
+</hibernate-mapping>
Added: core/trunk/testsuite/src/test/java/org/hibernate/test/fetchprofiles/basic/Student.java
===================================================================
--- core/trunk/testsuite/src/test/java/org/hibernate/test/fetchprofiles/basic/Student.java (rev 0)
+++ core/trunk/testsuite/src/test/java/org/hibernate/test/fetchprofiles/basic/Student.java 2008-08-15 21:20:15 UTC (rev 15091)
@@ -0,0 +1,58 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
+ * indicated by the @author tags or express copyright attribution
+ * statements applied by the authors. All third-party contributions are
+ * distributed under license by Red Hat Middleware LLC.
+ *
+ * This copyrighted material is made available to anyone wishing to use, modify,
+ * copy, or redistribute it subject to the terms and conditions of the GNU
+ * Lesser General Public License, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this distribution; if not, write to:
+ * Free Software Foundation, Inc.
+ * 51 Franklin Street, Fifth Floor
+ * Boston, MA 02110-1301 USA
+ *
+ */
+package org.hibernate.test.fetchprofiles.basic;
+
+/**
+ * TODO : javadoc
+ *
+ * @author Steve Ebersole
+ */
+public class Student {
+ private Long id;
+ private String name;
+
+ public Student() {
+ }
+
+ public Student(String name) {
+ this.name = name;
+ }
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
Modified: core/trunk/testsuite/src/test/resources/hibernate.properties
===================================================================
--- core/trunk/testsuite/src/test/resources/hibernate.properties 2008-08-15 21:03:38 UTC (rev 15090)
+++ core/trunk/testsuite/src/test/resources/hibernate.properties 2008-08-15 21:20:15 UTC (rev 15091)
@@ -22,6 +22,7 @@
hibernate.connection.pool_size 5
+hibernate.show_sql true
hibernate.format_sql true
hibernate.max_fetch_depth 5
16 years, 1 month
Hibernate SVN: r15090 - core/branches/Branch_3_2_4_SP1_CP/src/org/hibernate/criterion.
by hibernate-commits@lists.jboss.org
Author: cbredesen
Date: 2008-08-15 17:03:38 -0400 (Fri, 15 Aug 2008)
New Revision: 15090
Modified:
core/branches/Branch_3_2_4_SP1_CP/src/org/hibernate/criterion/DetachedCriteria.java
Log:
JBPAPP-1083 - HHH-1696 - Add outer join support for aliases on DetachedCriteria
Modified: core/branches/Branch_3_2_4_SP1_CP/src/org/hibernate/criterion/DetachedCriteria.java
===================================================================
--- core/branches/Branch_3_2_4_SP1_CP/src/org/hibernate/criterion/DetachedCriteria.java 2008-08-15 15:55:04 UTC (rev 15089)
+++ core/branches/Branch_3_2_4_SP1_CP/src/org/hibernate/criterion/DetachedCriteria.java 2008-08-15 21:03:38 UTC (rev 15090)
@@ -6,10 +6,10 @@
import org.hibernate.Criteria;
import org.hibernate.FetchMode;
import org.hibernate.HibernateException;
+import org.hibernate.LockMode;
import org.hibernate.Session;
import org.hibernate.engine.SessionImplementor;
import org.hibernate.impl.CriteriaImpl;
-import org.hibernate.impl.SessionImpl;
import org.hibernate.transform.ResultTransformer;
/**
@@ -87,7 +87,7 @@
public DetachedCriteria createCriteria(String associationPath, String alias)
throws HibernateException {
- return new DetachedCriteria( impl, criteria.createCriteria(associationPath) );
+ return new DetachedCriteria( impl, criteria.createCriteria(associationPath, alias) );
}
public DetachedCriteria createCriteria(String associationPath)
@@ -122,4 +122,32 @@
CriteriaImpl getCriteriaImpl() {
return impl;
}
+
+ public DetachedCriteria createAlias(String associationPath, String alias, int joinType) throws HibernateException {
+ criteria.createAlias(associationPath, alias, joinType);
+ return this;
+ }
+
+ public DetachedCriteria createCriteria(String associationPath, int joinType) throws HibernateException {
+ return new DetachedCriteria(impl, criteria.createCriteria(associationPath, joinType));
+ }
+
+ public DetachedCriteria createCriteria(String associationPath, String alias, int joinType) throws HibernateException {
+ return new DetachedCriteria(impl, criteria.createCriteria(associationPath, alias, joinType));
+ }
+
+ public DetachedCriteria setComment(String comment) {
+ criteria.setComment(comment);
+ return this;
+ }
+
+ public DetachedCriteria setLockMode(LockMode lockMode) {
+ criteria.setLockMode(lockMode);
+ return this;
+ }
+
+ public DetachedCriteria setLockMode(String alias, LockMode lockMode) {
+ criteria.setLockMode(alias, lockMode);
+ return this;
+ }
}
16 years, 1 month
Hibernate SVN: r15089 - entitymanager/trunk/src/java/org/hibernate/ejb.
by hibernate-commits@lists.jboss.org
Author: epbernard
Date: 2008-08-15 11:55:04 -0400 (Fri, 15 Aug 2008)
New Revision: 15089
Modified:
entitymanager/trunk/src/java/org/hibernate/ejb/QueryImpl.java
Log:
EJB-375 fix faulty algo
Modified: entitymanager/trunk/src/java/org/hibernate/ejb/QueryImpl.java
===================================================================
--- entitymanager/trunk/src/java/org/hibernate/ejb/QueryImpl.java 2008-08-15 10:02:32 UTC (rev 15088)
+++ entitymanager/trunk/src/java/org/hibernate/ejb/QueryImpl.java 2008-08-15 15:55:04 UTC (rev 15089)
@@ -19,6 +19,7 @@
import org.hibernate.HibernateException;
import org.hibernate.QueryParameterException;
import org.hibernate.TypeMismatchException;
+import org.hibernate.impl.AbstractQueryImpl;
import org.hibernate.ejb.util.ConfigurationHelper;
import org.hibernate.hql.QueryExecutionRequestException;
@@ -79,9 +80,26 @@
public Object getSingleResult() {
try {
- if (maxResults != 1) query.setMaxResults( 2 ); //avoid OOME if the list is huge
- List result = query.list();
- if ( maxResults != -1 ) query.setMaxResults( maxResults ); //put back the original value
+ List result;
+ /* Avoid OOME if the list() is huge (user faulty query) by limiting the query to 2 elements max */
+ //FIXME: get rid of this impl binding (HHH-3432)
+ if ( query instanceof AbstractQueryImpl ) {
+ if (maxResults != 1) query.setMaxResults( 2 ); //avoid OOME if the list is huge
+ result = query.list();
+ if ( maxResults != -1 ) {
+ query.setMaxResults( maxResults ); //put back the original value
+ }
+ else {
+ AbstractQueryImpl queryImpl = AbstractQueryImpl.class.cast( query );
+ queryImpl.getSelection().setMaxRows( null );
+ }
+ }
+ else {
+ //we can't do much because we cannot reset the maxResults => do the full list call
+ //Not tremendously bad as the user is doing a fault here anyway by calling getSingleREsults on a big list
+ result = query.list();
+ }
+
if ( result.size() == 0 ) {
em.throwPersistenceException( new NoResultException( "No entity found for query" ) );
}
16 years, 1 month
Hibernate SVN: r15088 - in search/trunk/src: test/org/hibernate/search/test/id/providedId and 1 other directory.
by hibernate-commits@lists.jboss.org
Author: navssurtani
Date: 2008-08-15 06:02:32 -0400 (Fri, 15 Aug 2008)
New Revision: 15088
Modified:
search/trunk/src/java/org/hibernate/search/bridge/BridgeFactory.java
search/trunk/src/test/org/hibernate/search/test/id/providedId/JBossCachePerson.java
Log:
Changed return types in @ProvidedId
Modified: search/trunk/src/java/org/hibernate/search/bridge/BridgeFactory.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/bridge/BridgeFactory.java 2008-08-15 09:19:46 UTC (rev 15087)
+++ search/trunk/src/java/org/hibernate/search/bridge/BridgeFactory.java 2008-08-15 10:02:32 UTC (rev 15088)
@@ -235,13 +235,72 @@
}
}
- public static TwoWayFieldBridge extractTwoWayType(ClassBridge classBridge) {
- FieldBridge fb = extractType( classBridge );
+ /**
+ * Takes in a fieldBridge and will return you a TwoWayFieldBridge instance.
+ *
+ * @param fieldBridge
+ * @return a TwoWayFieldBridge instance if the Field Bridge is an instance of a TwoWayFieldBridge.
+ * @throws SearchException if the FieldBridge passed in is not an instance of a TwoWayFieldBridge.
+ */
+
+ public static TwoWayFieldBridge extractTwoWayType(org.hibernate.search.annotations.FieldBridge fieldBridge) {
+ FieldBridge fb = extractType( fieldBridge );
if ( fb instanceof TwoWayFieldBridge ) {
return ( TwoWayFieldBridge ) fb;
}
else {
- throw new SearchException( "ClassBridge passed in is not an instance of " + TwoWayFieldBridge.class.getSimpleName() );
+ throw new SearchException( "FieldBridge passed in is not an instance of " + TwoWayFieldBridge.class.getSimpleName() );
}
}
+
+ /**
+ * This extracts and instantiates the implementation class from a ClassBridge
+ * annotation.
+ *
+ * @param fieldBridgeAnnotation the FieldBridge annotation
+ * @return FieldBridge
+ */
+ public static FieldBridge extractType(org.hibernate.search.annotations.FieldBridge fieldBridgeAnnotation)
+ {
+ FieldBridge bridge = null;
+
+ if ( fieldBridgeAnnotation != null ) {
+ Class impl = fieldBridgeAnnotation.impl();
+ //TODO better error information ( see guessType() )
+ if (impl != null) {
+ try {
+ Object instance = impl.newInstance();
+ if ( FieldBridge.class.isAssignableFrom( impl ) ) {
+ bridge = (FieldBridge) instance;
+ }
+ else if ( org.hibernate.search.bridge.TwoWayStringBridge.class.isAssignableFrom( impl ) ) {
+ bridge = new TwoWayString2FieldBridgeAdaptor(
+ (org.hibernate.search.bridge.TwoWayStringBridge) instance );
+ }
+ else if ( org.hibernate.search.bridge.StringBridge.class.isAssignableFrom( impl ) ) {
+ bridge = new String2FieldBridgeAdaptor( (org.hibernate.search.bridge.StringBridge) instance );
+ }
+ else {
+ throw new SearchException("@ClassBridge implementation implements none of the field bridge interfaces: "
+ + impl );
+ }
+ if ( fieldBridgeAnnotation.params().length > 0 && ParameterizedBridge.class.isAssignableFrom( impl ) ) {
+ Map params = new HashMap( fieldBridgeAnnotation.params().length );
+ for ( Parameter param : fieldBridgeAnnotation.params() ) {
+ params.put( param.name(), param.value() );
+ }
+ ( (ParameterizedBridge) instance ).setParameterValues( params );
+ }
+ }
+ catch (Exception e) {
+ throw new HibernateException( "Unable to instantiate FieldBridge for " + ClassBridge.class.getName(), e );
+ }
+ }
+ }
+ if ( bridge == null ) throw new SearchException( "Unable to guess FieldBridge for " + ClassBridge.class.getName() );
+
+ return bridge;
+ }
+
+
}
Modified: search/trunk/src/test/org/hibernate/search/test/id/providedId/JBossCachePerson.java
===================================================================
--- search/trunk/src/test/org/hibernate/search/test/id/providedId/JBossCachePerson.java 2008-08-15 09:19:46 UTC (rev 15087)
+++ search/trunk/src/test/org/hibernate/search/test/id/providedId/JBossCachePerson.java 2008-08-15 10:02:32 UTC (rev 15088)
@@ -13,7 +13,7 @@
@author Navin Surtani (<a href="mailto:nsurtani@redhat.com">nsurtani(a)redhat.com</a>)
*/
@Entity
-@ProvidedId(bridgeImpl = @ClassBridge(impl = LongBridge.class))
+@ProvidedId(bridge = @FieldBridge(impl = LongBridge.class))
@Indexed
public class JBossCachePerson implements Serializable
{
16 years, 1 month
Hibernate SVN: r15087 - annotations/trunk/doc/reference/en.
by hibernate-commits@lists.jboss.org
Author: hardy.ferentschik
Date: 2008-08-15 05:19:46 -0400 (Fri, 15 Aug 2008)
New Revision: 15087
Modified:
annotations/trunk/doc/reference/en/master.xml
Log:
Updated reface after a request from a translator for clarifications on the last paragraph of the preface.
Modified: annotations/trunk/doc/reference/en/master.xml
===================================================================
--- annotations/trunk/doc/reference/en/master.xml 2008-08-15 06:15:40 UTC (rev 15086)
+++ annotations/trunk/doc/reference/en/master.xml 2008-08-15 09:19:46 UTC (rev 15087)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
+<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3CR3//EN"
"../support/docbook-dtd/docbookx.dtd" [
<!ENTITY setup SYSTEM "modules/setup.xml">
@@ -28,38 +28,40 @@
<para>Hibernate, like all other object/relational mapping tools, requires
metadata that governs the transformation of data from one representation
- to the other (and vice versa). In Hibernate 2.x, mapping metadata is most
- of the time declared in XML text files. Another option is XDoclet,
- utilizing Javadoc source code annotations and a preprocessor at compile
- time. The same kind of annotation support is now available in the standard
- JDK, although more powerful and better supported by tools. IntelliJ IDEA,
+ to the other. In Hibernate 2.x mapping metadata is most of the time
+ declared in XML text files. Alternatively XDoclet can be used utilizing
+ Javadoc source code annotations together with a compile time preprocessor.
+ </para>
+
+ <para>The same kind of annotation support is now available in the standard
+ JDK, although more powerful and with better tools support. IntelliJ IDEA
and Eclipse for example, support auto-completion and syntax highlighting
- of JDK 5.0 annotations. Annotations are compiled into the bytecode and
- read at runtime (in Hibernate's case on startup) using reflection, so no
- external XML files are needed.</para>
+ of JDK 5.0 annotations which are compiled into the bytecode and read at
+ runtime using reflection. No external XML files are needed.</para>
<para>The EJB3 specification recognizes the interest and the success of
- the transparent object/relational mapping paradigm. The EJB3 specification
- standardizes the basic APIs and the metadata needed for any
- object/relational persistence mechanism. <emphasis>Hibernate
- EntityManager</emphasis> implements the programming interfaces and
- lifecycle rules as defined by the EJB3 persistence specification. Together
- with <emphasis>Hibernate Annotations</emphasis>, this wrapper implements a
- complete (and standalone) EJB3 persistence solution on top of the mature
- Hibernate core. You may use a combination of all three together,
- annotations without EJB3 programming interfaces and lifecycle, or even
- pure native Hibernate, depending on the business and technical needs of
- your project. You can at all times fall back to Hibernate native APIs, or
- if required, even to native JDBC and SQL.</para>
+ the transparent object/relational mapping paradigm. It standardizes the
+ basic APIs and the metadata needed for any object/relational persistence
+ mechanism. <emphasis>Hibernate EntityManager</emphasis> implements the
+ programming interfaces and lifecycle rules as defined by the EJB3
+ persistence specification and together with <emphasis>Hibernate
+ Annotations</emphasis> offers a complete (and standalone) EJB3 persistence
+ solution on top of the mature Hibernate core. You may use a combination of
+ all three together, annotations without EJB3 programming interfaces and
+ lifecycle, or even pure native Hibernate, depending on the business and
+ technical needs of your project. At all times you cann fall back to
+ Hibernate native APIs, or if required, even to native JDBC and SQL.</para>
- <para>This release is based on the final release of the EJB 3.0 / JPA
- specification (aka JSP-220) and support all the specification features
- (including the optional ones). Most of the Hibernate features and
- extensions are also available through Hibernate specific annotations
- compared to the specification are also available. While the Hibernate
- feature coverage is now very high, some are still missing. The eventual
- goal is to cover all of them. See the JIRA road map section for more
- informations.</para>
+ <para>This release of <emphasis>Hibernate Annotations</emphasis> is based
+ on the final release of the EJB 3.0 / JPA specification (aka <link
+ linkend="???"><ulink
+ url="http://jcp.org/en/jsr/detail?id=220">JSR-220</ulink></link>) and
+ supports all its features (including the optional ones). Hibernate
+ specific features and extensions are also available through
+ unstandardized, Hibernate specific annotations. While the Hibernate
+ feature coverage is high, some can not yet be expressed via annotations.
+ The eventual goal is to cover all of them. See the JIRA road map section
+ for more informations.</para>
<para>If you are moving from previous Hibernate Annotations versions,
please have a look at <ulink url="http://www.hibernate.org/398.html">Java
@@ -73,5 +75,4 @@
&xml-overriding;
&additionalmodules;
-
</book>
\ No newline at end of file
16 years, 1 month
Hibernate SVN: r15086 - in search/trunk/src/java/org/hibernate/search: engine and 1 other directory.
by hibernate-commits@lists.jboss.org
Author: navssurtani
Date: 2008-08-15 02:15:40 -0400 (Fri, 15 Aug 2008)
New Revision: 15086
Modified:
search/trunk/src/java/org/hibernate/search/annotations/ProvidedId.java
search/trunk/src/java/org/hibernate/search/engine/DocumentBuilder.java
Log:
Changed bridgeImpl() in @ProvidedId to bridge()
Modified: search/trunk/src/java/org/hibernate/search/annotations/ProvidedId.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/annotations/ProvidedId.java 2008-08-14 21:11:28 UTC (rev 15085)
+++ search/trunk/src/java/org/hibernate/search/annotations/ProvidedId.java 2008-08-15 06:15:40 UTC (rev 15086)
@@ -26,5 +26,5 @@
String name() default "providedId";
- ClassBridge bridgeImpl() default @ClassBridge(impl = org.hibernate.search.bridge.builtin.StringBridge.class);
+ ClassBridge bridge() default @ClassBridge(impl = org.hibernate.search.bridge.builtin.StringBridge.class);
}
Modified: search/trunk/src/java/org/hibernate/search/engine/DocumentBuilder.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/engine/DocumentBuilder.java 2008-08-14 21:11:28 UTC (rev 15085)
+++ search/trunk/src/java/org/hibernate/search/engine/DocumentBuilder.java 2008-08-15 06:15:40 UTC (rev 15086)
@@ -118,7 +118,7 @@
ProvidedId provided = clazz.getAnnotation( org.hibernate.search.annotations.ProvidedId.class );
if ( provided == null ) throw new SearchException( "No document id in: " + clazz.getName() );
- idBridge = BridgeFactory.extractTwoWayType(provided.bridgeImpl());
+ idBridge = BridgeFactory.extractTwoWayType(provided.bridge());
idKeywordName = provided.name();
}
//if composite id, use of (a, b) in ((1,2)TwoWayString2FieldBridgeAdaptor, (3,4)) fails on most database
16 years, 1 month
Hibernate SVN: r15085 - in core/branches/Branch_3_3: cache-ehcache and 18 other directories.
by hibernate-commits@lists.jboss.org
Author: steve.ebersole(a)jboss.com
Date: 2008-08-14 17:11:28 -0400 (Thu, 14 Aug 2008)
New Revision: 15085
Modified:
core/branches/Branch_3_3/cache-ehcache/pom.xml
core/branches/Branch_3_3/cache-jbosscache/pom.xml
core/branches/Branch_3_3/cache-jbosscache2/pom.xml
core/branches/Branch_3_3/cache-oscache/pom.xml
core/branches/Branch_3_3/cache-swarmcache/pom.xml
core/branches/Branch_3_3/connection-c3p0/pom.xml
core/branches/Branch_3_3/connection-proxool/pom.xml
core/branches/Branch_3_3/core/pom.xml
core/branches/Branch_3_3/distribution/pom.xml
core/branches/Branch_3_3/documentation/manual/pom.xml
core/branches/Branch_3_3/documentation/pom.xml
core/branches/Branch_3_3/documentation/releasenotes/pom.xml
core/branches/Branch_3_3/jmx/pom.xml
core/branches/Branch_3_3/parent/pom.xml
core/branches/Branch_3_3/pom.xml
core/branches/Branch_3_3/testing/pom.xml
core/branches/Branch_3_3/testsuite/pom.xml
core/branches/Branch_3_3/tutorials/eg/pom.xml
core/branches/Branch_3_3/tutorials/pom.xml
core/branches/Branch_3_3/tutorials/web/pom.xml
Log:
[maven-release-plugin] prepare for next development iteration
Modified: core/branches/Branch_3_3/cache-ehcache/pom.xml
===================================================================
--- core/branches/Branch_3_3/cache-ehcache/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
+++ core/branches/Branch_3_3/cache-ehcache/pom.xml 2008-08-14 21:11:28 UTC (rev 15085)
@@ -5,7 +5,7 @@
<parent>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-parent</artifactId>
- <version>3.3.0.GA</version>
+ <version>3.3.1-SNAPSHOT</version>
<relativePath>../parent/pom.xml</relativePath>
</parent>
Modified: core/branches/Branch_3_3/cache-jbosscache/pom.xml
===================================================================
--- core/branches/Branch_3_3/cache-jbosscache/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
+++ core/branches/Branch_3_3/cache-jbosscache/pom.xml 2008-08-14 21:11:28 UTC (rev 15085)
@@ -5,7 +5,7 @@
<parent>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-parent</artifactId>
- <version>3.3.0.GA</version>
+ <version>3.3.1-SNAPSHOT</version>
<relativePath>../parent/pom.xml</relativePath>
</parent>
Modified: core/branches/Branch_3_3/cache-jbosscache2/pom.xml
===================================================================
--- core/branches/Branch_3_3/cache-jbosscache2/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
+++ core/branches/Branch_3_3/cache-jbosscache2/pom.xml 2008-08-14 21:11:28 UTC (rev 15085)
@@ -5,7 +5,7 @@
<parent>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-parent</artifactId>
- <version>3.3.0.GA</version>
+ <version>3.3.1-SNAPSHOT</version>
<relativePath>../parent/pom.xml</relativePath>
</parent>
Modified: core/branches/Branch_3_3/cache-oscache/pom.xml
===================================================================
--- core/branches/Branch_3_3/cache-oscache/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
+++ core/branches/Branch_3_3/cache-oscache/pom.xml 2008-08-14 21:11:28 UTC (rev 15085)
@@ -5,7 +5,7 @@
<parent>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-parent</artifactId>
- <version>3.3.0.GA</version>
+ <version>3.3.1-SNAPSHOT</version>
<relativePath>../parent/pom.xml</relativePath>
</parent>
Modified: core/branches/Branch_3_3/cache-swarmcache/pom.xml
===================================================================
--- core/branches/Branch_3_3/cache-swarmcache/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
+++ core/branches/Branch_3_3/cache-swarmcache/pom.xml 2008-08-14 21:11:28 UTC (rev 15085)
@@ -5,7 +5,7 @@
<parent>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-parent</artifactId>
- <version>3.3.0.GA</version>
+ <version>3.3.1-SNAPSHOT</version>
<relativePath>../parent/pom.xml</relativePath>
</parent>
Modified: core/branches/Branch_3_3/connection-c3p0/pom.xml
===================================================================
--- core/branches/Branch_3_3/connection-c3p0/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
+++ core/branches/Branch_3_3/connection-c3p0/pom.xml 2008-08-14 21:11:28 UTC (rev 15085)
@@ -5,7 +5,7 @@
<parent>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-parent</artifactId>
- <version>3.3.0.GA</version>
+ <version>3.3.1-SNAPSHOT</version>
<relativePath>../parent/pom.xml</relativePath>
</parent>
Modified: core/branches/Branch_3_3/connection-proxool/pom.xml
===================================================================
--- core/branches/Branch_3_3/connection-proxool/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
+++ core/branches/Branch_3_3/connection-proxool/pom.xml 2008-08-14 21:11:28 UTC (rev 15085)
@@ -5,7 +5,7 @@
<parent>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-parent</artifactId>
- <version>3.3.0.GA</version>
+ <version>3.3.1-SNAPSHOT</version>
<relativePath>../parent/pom.xml</relativePath>
</parent>
Modified: core/branches/Branch_3_3/core/pom.xml
===================================================================
--- core/branches/Branch_3_3/core/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
+++ core/branches/Branch_3_3/core/pom.xml 2008-08-14 21:11:28 UTC (rev 15085)
@@ -5,7 +5,7 @@
<parent>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-parent</artifactId>
- <version>3.3.0.GA</version>
+ <version>3.3.1-SNAPSHOT</version>
<relativePath>../parent/pom.xml</relativePath>
</parent>
Modified: core/branches/Branch_3_3/distribution/pom.xml
===================================================================
--- core/branches/Branch_3_3/distribution/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
+++ core/branches/Branch_3_3/distribution/pom.xml 2008-08-14 21:11:28 UTC (rev 15085)
@@ -32,7 +32,7 @@
<parent>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-parent</artifactId>
- <version>3.3.0.GA</version>
+ <version>3.3.1-SNAPSHOT</version>
<relativePath>../parent/pom.xml</relativePath>
</parent>
Modified: core/branches/Branch_3_3/documentation/manual/pom.xml
===================================================================
--- core/branches/Branch_3_3/documentation/manual/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
+++ core/branches/Branch_3_3/documentation/manual/pom.xml 2008-08-14 21:11:28 UTC (rev 15085)
@@ -5,7 +5,7 @@
<parent>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-parent</artifactId>
- <version>3.3.0.GA</version>
+ <version>3.3.1-SNAPSHOT</version>
<relativePath>../../parent/pom.xml</relativePath>
</parent>
Modified: core/branches/Branch_3_3/documentation/pom.xml
===================================================================
--- core/branches/Branch_3_3/documentation/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
+++ core/branches/Branch_3_3/documentation/pom.xml 2008-08-14 21:11:28 UTC (rev 15085)
@@ -5,7 +5,7 @@
<parent>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-parent</artifactId>
- <version>3.3.0.GA</version>
+ <version>3.3.1-SNAPSHOT</version>
<relativePath>../parent/pom.xml</relativePath>
</parent>
Modified: core/branches/Branch_3_3/documentation/releasenotes/pom.xml
===================================================================
--- core/branches/Branch_3_3/documentation/releasenotes/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
+++ core/branches/Branch_3_3/documentation/releasenotes/pom.xml 2008-08-14 21:11:28 UTC (rev 15085)
@@ -5,7 +5,7 @@
<parent>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-parent</artifactId>
- <version>3.3.0.GA</version>
+ <version>3.3.1-SNAPSHOT</version>
<relativePath>../../parent/pom.xml</relativePath>
</parent>
Modified: core/branches/Branch_3_3/jmx/pom.xml
===================================================================
--- core/branches/Branch_3_3/jmx/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
+++ core/branches/Branch_3_3/jmx/pom.xml 2008-08-14 21:11:28 UTC (rev 15085)
@@ -5,7 +5,7 @@
<parent>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-parent</artifactId>
- <version>3.3.0.GA</version>
+ <version>3.3.1-SNAPSHOT</version>
<relativePath>../parent/pom.xml</relativePath>
</parent>
Modified: core/branches/Branch_3_3/parent/pom.xml
===================================================================
--- core/branches/Branch_3_3/parent/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
+++ core/branches/Branch_3_3/parent/pom.xml 2008-08-14 21:11:28 UTC (rev 15085)
@@ -32,7 +32,7 @@
<groupId>org.hibernate</groupId>
<artifactId>hibernate-parent</artifactId>
<packaging>pom</packaging>
- <version>3.3.0.GA</version>
+ <version>3.3.1-SNAPSHOT</version>
<name>Hibernate Core Parent POM</name>
<description>The base POM for all Hibernate Core modules.</description>
@@ -53,9 +53,9 @@
</licenses>
<scm>
- <connection>scm:svn:https://svn.jboss.org/repos/hibernate/core/tags/hibernate-3.3.0.GA</connection>
- <developerConnection>scm:svn:https://svn.jboss.org/repos/hibernate/core/tags/hibernate-3.3.0.GA</developerConnection>
- <url>https://svn.jboss.org/repos/hibernate/core/tags/hibernate-3.3.0.GA</url>
+ <connection>scm:svn:https://svn.jboss.org/repos/hibernate/core/branches/Branch_3_3</connection>
+ <developerConnection>scm:svn:https://svn.jboss.org/repos/hibernate/core/branches/Branch_3_3</developerConnection>
+ <url>https://svn.jboss.org/repos/hibernate/core/branches/Branch_3_3</url>
</scm>
<ciManagement>
Modified: core/branches/Branch_3_3/pom.xml
===================================================================
--- core/branches/Branch_3_3/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
+++ core/branches/Branch_3_3/pom.xml 2008-08-14 21:11:28 UTC (rev 15085)
@@ -32,7 +32,7 @@
<parent>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-parent</artifactId>
- <version>3.3.0.GA</version>
+ <version>3.3.1-SNAPSHOT</version>
<relativePath>parent/pom.xml</relativePath>
</parent>
Modified: core/branches/Branch_3_3/testing/pom.xml
===================================================================
--- core/branches/Branch_3_3/testing/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
+++ core/branches/Branch_3_3/testing/pom.xml 2008-08-14 21:11:28 UTC (rev 15085)
@@ -5,7 +5,7 @@
<parent>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-parent</artifactId>
- <version>3.3.0.GA</version>
+ <version>3.3.1-SNAPSHOT</version>
<relativePath>../parent/pom.xml</relativePath>
</parent>
Modified: core/branches/Branch_3_3/testsuite/pom.xml
===================================================================
--- core/branches/Branch_3_3/testsuite/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
+++ core/branches/Branch_3_3/testsuite/pom.xml 2008-08-14 21:11:28 UTC (rev 15085)
@@ -5,7 +5,7 @@
<parent>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-parent</artifactId>
- <version>3.3.0.GA</version>
+ <version>3.3.1-SNAPSHOT</version>
<relativePath>../parent/pom.xml</relativePath>
</parent>
Modified: core/branches/Branch_3_3/tutorials/eg/pom.xml
===================================================================
--- core/branches/Branch_3_3/tutorials/eg/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
+++ core/branches/Branch_3_3/tutorials/eg/pom.xml 2008-08-14 21:11:28 UTC (rev 15085)
@@ -32,7 +32,7 @@
<parent>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-tutorials</artifactId>
- <version>3.3.0.GA</version>
+ <version>3.3.1-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
Modified: core/branches/Branch_3_3/tutorials/pom.xml
===================================================================
--- core/branches/Branch_3_3/tutorials/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
+++ core/branches/Branch_3_3/tutorials/pom.xml 2008-08-14 21:11:28 UTC (rev 15085)
@@ -31,7 +31,7 @@
<parent>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-parent</artifactId>
- <version>3.3.0.GA</version>
+ <version>3.3.1-SNAPSHOT</version>
<relativePath>../parent/pom.xml</relativePath>
</parent>
Modified: core/branches/Branch_3_3/tutorials/web/pom.xml
===================================================================
--- core/branches/Branch_3_3/tutorials/web/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
+++ core/branches/Branch_3_3/tutorials/web/pom.xml 2008-08-14 21:11:28 UTC (rev 15085)
@@ -5,7 +5,7 @@
<parent>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-tutorials</artifactId>
- <version>3.3.0.GA</version>
+ <version>3.3.1-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
16 years, 1 month
Hibernate SVN: r15084 - in core/tags: hibernate-3.3.0.GA and 19 other directories.
by hibernate-commits@lists.jboss.org
Author: steve.ebersole(a)jboss.com
Date: 2008-08-14 17:11:12 -0400 (Thu, 14 Aug 2008)
New Revision: 15084
Added:
core/tags/hibernate-3.3.0.GA/
core/tags/hibernate-3.3.0.GA/cache-ehcache/pom.xml
core/tags/hibernate-3.3.0.GA/cache-jbosscache/pom.xml
core/tags/hibernate-3.3.0.GA/cache-jbosscache2/pom.xml
core/tags/hibernate-3.3.0.GA/cache-oscache/pom.xml
core/tags/hibernate-3.3.0.GA/cache-swarmcache/pom.xml
core/tags/hibernate-3.3.0.GA/changelog.txt
core/tags/hibernate-3.3.0.GA/connection-c3p0/pom.xml
core/tags/hibernate-3.3.0.GA/connection-proxool/pom.xml
core/tags/hibernate-3.3.0.GA/core/pom.xml
core/tags/hibernate-3.3.0.GA/distribution/pom.xml
core/tags/hibernate-3.3.0.GA/documentation/manual/pom.xml
core/tags/hibernate-3.3.0.GA/documentation/pom.xml
core/tags/hibernate-3.3.0.GA/documentation/releasenotes/pom.xml
core/tags/hibernate-3.3.0.GA/jmx/pom.xml
core/tags/hibernate-3.3.0.GA/parent/pom.xml
core/tags/hibernate-3.3.0.GA/pom.xml
core/tags/hibernate-3.3.0.GA/testing/pom.xml
core/tags/hibernate-3.3.0.GA/testsuite/pom.xml
core/tags/hibernate-3.3.0.GA/tutorials/eg/pom.xml
core/tags/hibernate-3.3.0.GA/tutorials/pom.xml
core/tags/hibernate-3.3.0.GA/tutorials/web/pom.xml
Removed:
core/tags/hibernate-3.3.0.GA/cache-ehcache/pom.xml
core/tags/hibernate-3.3.0.GA/cache-jbosscache/pom.xml
core/tags/hibernate-3.3.0.GA/cache-jbosscache2/pom.xml
core/tags/hibernate-3.3.0.GA/cache-oscache/pom.xml
core/tags/hibernate-3.3.0.GA/cache-swarmcache/pom.xml
core/tags/hibernate-3.3.0.GA/changelog.txt
core/tags/hibernate-3.3.0.GA/connection-c3p0/pom.xml
core/tags/hibernate-3.3.0.GA/connection-proxool/pom.xml
core/tags/hibernate-3.3.0.GA/core/pom.xml
core/tags/hibernate-3.3.0.GA/distribution/pom.xml
core/tags/hibernate-3.3.0.GA/documentation/manual/pom.xml
core/tags/hibernate-3.3.0.GA/documentation/pom.xml
core/tags/hibernate-3.3.0.GA/documentation/releasenotes/pom.xml
core/tags/hibernate-3.3.0.GA/jmx/pom.xml
core/tags/hibernate-3.3.0.GA/parent/pom.xml
core/tags/hibernate-3.3.0.GA/pom.xml
core/tags/hibernate-3.3.0.GA/testing/pom.xml
core/tags/hibernate-3.3.0.GA/testsuite/pom.xml
core/tags/hibernate-3.3.0.GA/tutorials/eg/pom.xml
core/tags/hibernate-3.3.0.GA/tutorials/pom.xml
core/tags/hibernate-3.3.0.GA/tutorials/web/pom.xml
Log:
[maven-release-plugin] copy for tag hibernate-3.3.0.GA
Copied: core/tags/hibernate-3.3.0.GA (from rev 15071, core/branches/Branch_3_3)
Deleted: core/tags/hibernate-3.3.0.GA/cache-ehcache/pom.xml
===================================================================
--- core/branches/Branch_3_3/cache-ehcache/pom.xml 2008-08-14 15:58:54 UTC (rev 15071)
+++ core/tags/hibernate-3.3.0.GA/cache-ehcache/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
@@ -1,94 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-parent</artifactId>
- <version>3.3.0-SNAPSHOT</version>
- <relativePath>../parent/pom.xml</relativePath>
- </parent>
-
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-ehcache</artifactId>
- <packaging>jar</packaging>
-
- <name>Hibernate Ehcache Integration</name>
- <description>Integration of Hibernate with Ehcache</description>
-
- <dependencies>
- <dependency>
- <groupId>${groupId}</groupId>
- <artifactId>hibernate-core</artifactId>
- <version>${version}</version>
- </dependency>
- <dependency>
- <groupId>net.sf.ehcache</groupId>
- <artifactId>ehcache</artifactId>
- <version>1.2.3</version>
- </dependency>
-
- <!-- testing deps -->
- <dependency>
- <groupId>${groupId}</groupId>
- <artifactId>hibernate-testing</artifactId>
- <version>${version}</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>hsqldb</groupId>
- <artifactId>hsqldb</artifactId>
- <version>1.8.0.2</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging</artifactId>
- <version>99.0-does-not-exist</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging-api</artifactId>
- <version>99.0-does-not-exist</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>jcl104-over-slf4j</artifactId>
- <version>1.4.2</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-log4j12</artifactId>
- <version>1.4.2</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>log4j</groupId>
- <artifactId>log4j</artifactId>
- <version>1.2.14</version>
- <scope>test</scope>
- </dependency>
- <!-- these are optional on core... :( -->
- <dependency>
- <groupId>javassist</groupId>
- <artifactId>javassist</artifactId>
- <version>3.4.GA</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>cglib</groupId>
- <artifactId>cglib</artifactId>
- <version>2.1_3</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>asm</groupId>
- <artifactId>asm-attrs</artifactId>
- <version>1.5.3</version>
- <scope>test</scope>
- </dependency>
- </dependencies>
-</project>
\ No newline at end of file
Copied: core/tags/hibernate-3.3.0.GA/cache-ehcache/pom.xml (from rev 15083, core/branches/Branch_3_3/cache-ehcache/pom.xml)
===================================================================
--- core/tags/hibernate-3.3.0.GA/cache-ehcache/pom.xml (rev 0)
+++ core/tags/hibernate-3.3.0.GA/cache-ehcache/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
@@ -0,0 +1,94 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-parent</artifactId>
+ <version>3.3.0.GA</version>
+ <relativePath>../parent/pom.xml</relativePath>
+ </parent>
+
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-ehcache</artifactId>
+ <packaging>jar</packaging>
+
+ <name>Hibernate Ehcache Integration</name>
+ <description>Integration of Hibernate with Ehcache</description>
+
+ <dependencies>
+ <dependency>
+ <groupId>${groupId}</groupId>
+ <artifactId>hibernate-core</artifactId>
+ <version>${version}</version>
+ </dependency>
+ <dependency>
+ <groupId>net.sf.ehcache</groupId>
+ <artifactId>ehcache</artifactId>
+ <version>1.2.3</version>
+ </dependency>
+
+ <!-- testing deps -->
+ <dependency>
+ <groupId>${groupId}</groupId>
+ <artifactId>hibernate-testing</artifactId>
+ <version>${version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>hsqldb</groupId>
+ <artifactId>hsqldb</artifactId>
+ <version>1.8.0.2</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ <version>99.0-does-not-exist</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging-api</artifactId>
+ <version>99.0-does-not-exist</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>jcl104-over-slf4j</artifactId>
+ <version>1.4.2</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-log4j12</artifactId>
+ <version>1.4.2</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>log4j</groupId>
+ <artifactId>log4j</artifactId>
+ <version>1.2.14</version>
+ <scope>test</scope>
+ </dependency>
+ <!-- these are optional on core... :( -->
+ <dependency>
+ <groupId>javassist</groupId>
+ <artifactId>javassist</artifactId>
+ <version>3.4.GA</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>cglib</groupId>
+ <artifactId>cglib</artifactId>
+ <version>2.1_3</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>asm</groupId>
+ <artifactId>asm-attrs</artifactId>
+ <version>1.5.3</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+</project>
\ No newline at end of file
Deleted: core/tags/hibernate-3.3.0.GA/cache-jbosscache/pom.xml
===================================================================
--- core/branches/Branch_3_3/cache-jbosscache/pom.xml 2008-08-14 15:58:54 UTC (rev 15071)
+++ core/tags/hibernate-3.3.0.GA/cache-jbosscache/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
@@ -1,125 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-parent</artifactId>
- <version>3.3.0-SNAPSHOT</version>
- <relativePath>../parent/pom.xml</relativePath>
- </parent>
-
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-jbosscache</artifactId>
- <packaging>jar</packaging>
-
- <name>Hibernate JBossCache Integration</name>
- <description>Integration of Hibernate with JBossCache (based on JBossCache1.x APIs)</description>
-
- <dependencies>
- <dependency>
- <groupId>${groupId}</groupId>
- <artifactId>hibernate-core</artifactId>
- <version>${version}</version>
- </dependency>
- <dependency>
- <groupId>jboss</groupId>
- <artifactId>jboss-cache</artifactId>
- <version>1.4.1.GA</version>
- </dependency>
- <!-- jboss-cache (the one from the jboss repo, anyway) does not properly define its dependencies -->
- <dependency>
- <groupId>jboss</groupId>
- <artifactId>jboss-system</artifactId>
- <version>4.0.2</version>
- </dependency>
- <dependency>
- <groupId>jboss</groupId>
- <artifactId>jboss-common</artifactId>
- <version>4.0.2</version>
- </dependency>
- <dependency>
- <groupId>jboss</groupId>
- <artifactId>jboss-minimal</artifactId>
- <version>4.0.2</version>
- </dependency>
- <dependency>
- <groupId>jboss</groupId>
- <artifactId>jboss-j2se</artifactId>
- <version>200504122039</version>
- </dependency>
- <dependency>
- <groupId>concurrent</groupId>
- <artifactId>concurrent</artifactId>
- <version>1.3.4</version>
- </dependency>
- <dependency>
- <groupId>jgroups</groupId>
- <artifactId>jgroups-all</artifactId>
- <version>2.2.7</version>
- </dependency>
-
- <!-- testing deps -->
- <dependency>
- <groupId>${groupId}</groupId>
- <artifactId>hibernate-testing</artifactId>
- <version>${version}</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>hsqldb</groupId>
- <artifactId>hsqldb</artifactId>
- <version>1.8.0.2</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging</artifactId>
- <version>99.0-does-not-exist</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging-api</artifactId>
- <version>99.0-does-not-exist</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>jcl104-over-slf4j</artifactId>
- <version>1.4.2</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-log4j12</artifactId>
- <version>1.4.2</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>log4j</groupId>
- <artifactId>log4j</artifactId>
- <version>1.2.14</version>
- <scope>test</scope>
- </dependency>
- <!-- these are optional on core... :( -->
- <dependency>
- <groupId>javassist</groupId>
- <artifactId>javassist</artifactId>
- <version>3.4.GA</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>cglib</groupId>
- <artifactId>cglib</artifactId>
- <version>2.1_3</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>asm</groupId>
- <artifactId>asm-attrs</artifactId>
- <version>1.5.3</version>
- <scope>test</scope>
- </dependency>
- </dependencies>
-</project>
\ No newline at end of file
Copied: core/tags/hibernate-3.3.0.GA/cache-jbosscache/pom.xml (from rev 15083, core/branches/Branch_3_3/cache-jbosscache/pom.xml)
===================================================================
--- core/tags/hibernate-3.3.0.GA/cache-jbosscache/pom.xml (rev 0)
+++ core/tags/hibernate-3.3.0.GA/cache-jbosscache/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
@@ -0,0 +1,125 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-parent</artifactId>
+ <version>3.3.0.GA</version>
+ <relativePath>../parent/pom.xml</relativePath>
+ </parent>
+
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-jbosscache</artifactId>
+ <packaging>jar</packaging>
+
+ <name>Hibernate JBossCache Integration</name>
+ <description>Integration of Hibernate with JBossCache (based on JBossCache1.x APIs)</description>
+
+ <dependencies>
+ <dependency>
+ <groupId>${groupId}</groupId>
+ <artifactId>hibernate-core</artifactId>
+ <version>${version}</version>
+ </dependency>
+ <dependency>
+ <groupId>jboss</groupId>
+ <artifactId>jboss-cache</artifactId>
+ <version>1.4.1.GA</version>
+ </dependency>
+ <!-- jboss-cache (the one from the jboss repo, anyway) does not properly define its dependencies -->
+ <dependency>
+ <groupId>jboss</groupId>
+ <artifactId>jboss-system</artifactId>
+ <version>4.0.2</version>
+ </dependency>
+ <dependency>
+ <groupId>jboss</groupId>
+ <artifactId>jboss-common</artifactId>
+ <version>4.0.2</version>
+ </dependency>
+ <dependency>
+ <groupId>jboss</groupId>
+ <artifactId>jboss-minimal</artifactId>
+ <version>4.0.2</version>
+ </dependency>
+ <dependency>
+ <groupId>jboss</groupId>
+ <artifactId>jboss-j2se</artifactId>
+ <version>200504122039</version>
+ </dependency>
+ <dependency>
+ <groupId>concurrent</groupId>
+ <artifactId>concurrent</artifactId>
+ <version>1.3.4</version>
+ </dependency>
+ <dependency>
+ <groupId>jgroups</groupId>
+ <artifactId>jgroups-all</artifactId>
+ <version>2.2.7</version>
+ </dependency>
+
+ <!-- testing deps -->
+ <dependency>
+ <groupId>${groupId}</groupId>
+ <artifactId>hibernate-testing</artifactId>
+ <version>${version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>hsqldb</groupId>
+ <artifactId>hsqldb</artifactId>
+ <version>1.8.0.2</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ <version>99.0-does-not-exist</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging-api</artifactId>
+ <version>99.0-does-not-exist</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>jcl104-over-slf4j</artifactId>
+ <version>1.4.2</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-log4j12</artifactId>
+ <version>1.4.2</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>log4j</groupId>
+ <artifactId>log4j</artifactId>
+ <version>1.2.14</version>
+ <scope>test</scope>
+ </dependency>
+ <!-- these are optional on core... :( -->
+ <dependency>
+ <groupId>javassist</groupId>
+ <artifactId>javassist</artifactId>
+ <version>3.4.GA</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>cglib</groupId>
+ <artifactId>cglib</artifactId>
+ <version>2.1_3</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>asm</groupId>
+ <artifactId>asm-attrs</artifactId>
+ <version>1.5.3</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+</project>
\ No newline at end of file
Deleted: core/tags/hibernate-3.3.0.GA/cache-jbosscache2/pom.xml
===================================================================
--- core/branches/Branch_3_3/cache-jbosscache2/pom.xml 2008-08-14 15:58:54 UTC (rev 15071)
+++ core/tags/hibernate-3.3.0.GA/cache-jbosscache2/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
@@ -1,187 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-parent</artifactId>
- <version>3.3.0-SNAPSHOT</version>
- <relativePath>../parent/pom.xml</relativePath>
- </parent>
-
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-jbosscache2</artifactId>
- <packaging>jar</packaging>
-
- <name>Hibernate JBossCache2.x Integration</name>
- <description>Integration of Hibernate with JBossCache (based on JBossCache2.x APIs)</description>
-
- <dependencies>
- <dependency>
- <groupId>${groupId}</groupId>
- <artifactId>hibernate-core</artifactId>
- <version>${version}</version>
- </dependency>
- <dependency>
- <groupId>org.jboss.cache</groupId>
- <artifactId>jbosscache-core</artifactId>
- <version>2.1.1.GA</version>
- </dependency>
-
- <!-- test dependencies -->
- <dependency>
- <groupId>${groupId}</groupId>
- <artifactId>hibernate-testing</artifactId>
- <version>${version}</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>hsqldb</groupId>
- <artifactId>hsqldb</artifactId>
- <version>1.8.0.2</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging</artifactId>
- <version>99.0-does-not-exist</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging-api</artifactId>
- <version>99.0-does-not-exist</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>jcl104-over-slf4j</artifactId>
- <version>1.4.2</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-log4j12</artifactId>
- <version>1.4.2</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>log4j</groupId>
- <artifactId>log4j</artifactId>
- <version>1.2.14</version>
- <scope>test</scope>
- </dependency>
- <!-- this is optional on core :( and needed for testing -->
- <dependency>
- <groupId>javassist</groupId>
- <artifactId>javassist</artifactId>
- <version>3.4.GA</version>
- <scope>test</scope>
- </dependency>
- </dependencies>
-
- <build>
- <testResources>
- <testResource>
- <filtering>false</filtering>
- <directory>src/test/java</directory>
- <includes>
- <include>**/*.xml</include>
- </includes>
- </testResource>
- <testResource>
- <filtering>true</filtering>
- <directory>src/test/resources</directory>
- </testResource>
- </testResources>
-
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <configuration>
- <source>1.5</source>
- <target>1.5</target>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-surefire-plugin</artifactId>
- <configuration>
- <excludes>
- <!-- Skip a long-running test of a prototype class -->
- <exclude>**/ClusteredConcurrentTimestampRegionTestCase.java</exclude>
- </excludes>
- <systemProperties>
- <property>
- <name>hibernate.test.validatefailureexpected</name>
- <value>true</value>
- </property>
- <property>
- <name>jgroups.bind_addr</name>
- <value>${jgroups.bind_addr}</value>
- </property>
- <!-- There are problems with multicast and IPv6 on some
- OS/JDK combos, so we tell Java to use IPv4. If you
- have problems with multicast when running the tests
- you can try setting this to 'false', although typically
- that won't be helpful.
- -->
- <property>
- <name>java.net.preferIPv4Stack</name>
- <value>true</value>
- </property>
- <!-- Tell JGroups to only wait a short time for PING
- responses before determining coordinator. Speeds cluster
- formation during integration tests. (This is too
- low a value for a real system; only use for tests.)
- -->
- <property>
- <name>jgroups.ping.timeout</name>
- <value>500</value>
- </property>
- <!-- Tell JGroups to only require one PING response
- before determining coordinator. Speeds cluster
- formation during integration tests. (This is too
- low a value for a real system; only use for tests.)
- -->
- <property>
- <name>jgroups.ping.num_initial_members</name>
- <value>1</value>
- </property>
- <!-- Disable the JGroups message bundling feature
- to speed tests and avoid FLUSH issue -->
- <property>
- <name>jgroups.udp.enable_bundling</name>
- <value>false</value>
- </property>
- </systemProperties>
- <skipExec>${skipUnitTests}</skipExec>
- </configuration>
- </plugin>
- </plugins>
- </build>
-
- <properties>
- <skipUnitTests>true</skipUnitTests>
- <!--
- Following is the default jgroups mcast address. If you find the testsuite runs very slowly, there
- may be problems with multicast on the interface JGroups uses by default on your machine. You can
- try to resolve setting 'jgroups.bind_addr' as a system-property to the jvm launching maven and
- setting the value to an interface where you know multicast works
- -->
- <jgroups.bind_addr>127.0.0.1</jgroups.bind_addr>
- </properties>
-
- <profiles>
- <profile>
- <id>test</id>
- <activation>
- <activeByDefault>false</activeByDefault>
- </activation>
- <properties>
- <skipUnitTests>false</skipUnitTests>
- </properties>
- </profile>
- </profiles>
-</project>
Copied: core/tags/hibernate-3.3.0.GA/cache-jbosscache2/pom.xml (from rev 15083, core/branches/Branch_3_3/cache-jbosscache2/pom.xml)
===================================================================
--- core/tags/hibernate-3.3.0.GA/cache-jbosscache2/pom.xml (rev 0)
+++ core/tags/hibernate-3.3.0.GA/cache-jbosscache2/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
@@ -0,0 +1,187 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-parent</artifactId>
+ <version>3.3.0.GA</version>
+ <relativePath>../parent/pom.xml</relativePath>
+ </parent>
+
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-jbosscache2</artifactId>
+ <packaging>jar</packaging>
+
+ <name>Hibernate JBossCache2.x Integration</name>
+ <description>Integration of Hibernate with JBossCache (based on JBossCache2.x APIs)</description>
+
+ <dependencies>
+ <dependency>
+ <groupId>${groupId}</groupId>
+ <artifactId>hibernate-core</artifactId>
+ <version>${version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.jboss.cache</groupId>
+ <artifactId>jbosscache-core</artifactId>
+ <version>2.1.1.GA</version>
+ </dependency>
+
+ <!-- test dependencies -->
+ <dependency>
+ <groupId>${groupId}</groupId>
+ <artifactId>hibernate-testing</artifactId>
+ <version>${version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>hsqldb</groupId>
+ <artifactId>hsqldb</artifactId>
+ <version>1.8.0.2</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ <version>99.0-does-not-exist</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging-api</artifactId>
+ <version>99.0-does-not-exist</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>jcl104-over-slf4j</artifactId>
+ <version>1.4.2</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-log4j12</artifactId>
+ <version>1.4.2</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>log4j</groupId>
+ <artifactId>log4j</artifactId>
+ <version>1.2.14</version>
+ <scope>test</scope>
+ </dependency>
+ <!-- this is optional on core :( and needed for testing -->
+ <dependency>
+ <groupId>javassist</groupId>
+ <artifactId>javassist</artifactId>
+ <version>3.4.GA</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <testResources>
+ <testResource>
+ <filtering>false</filtering>
+ <directory>src/test/java</directory>
+ <includes>
+ <include>**/*.xml</include>
+ </includes>
+ </testResource>
+ <testResource>
+ <filtering>true</filtering>
+ <directory>src/test/resources</directory>
+ </testResource>
+ </testResources>
+
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <source>1.5</source>
+ <target>1.5</target>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <excludes>
+ <!-- Skip a long-running test of a prototype class -->
+ <exclude>**/ClusteredConcurrentTimestampRegionTestCase.java</exclude>
+ </excludes>
+ <systemProperties>
+ <property>
+ <name>hibernate.test.validatefailureexpected</name>
+ <value>true</value>
+ </property>
+ <property>
+ <name>jgroups.bind_addr</name>
+ <value>${jgroups.bind_addr}</value>
+ </property>
+ <!-- There are problems with multicast and IPv6 on some
+ OS/JDK combos, so we tell Java to use IPv4. If you
+ have problems with multicast when running the tests
+ you can try setting this to 'false', although typically
+ that won't be helpful.
+ -->
+ <property>
+ <name>java.net.preferIPv4Stack</name>
+ <value>true</value>
+ </property>
+ <!-- Tell JGroups to only wait a short time for PING
+ responses before determining coordinator. Speeds cluster
+ formation during integration tests. (This is too
+ low a value for a real system; only use for tests.)
+ -->
+ <property>
+ <name>jgroups.ping.timeout</name>
+ <value>500</value>
+ </property>
+ <!-- Tell JGroups to only require one PING response
+ before determining coordinator. Speeds cluster
+ formation during integration tests. (This is too
+ low a value for a real system; only use for tests.)
+ -->
+ <property>
+ <name>jgroups.ping.num_initial_members</name>
+ <value>1</value>
+ </property>
+ <!-- Disable the JGroups message bundling feature
+ to speed tests and avoid FLUSH issue -->
+ <property>
+ <name>jgroups.udp.enable_bundling</name>
+ <value>false</value>
+ </property>
+ </systemProperties>
+ <skipExec>${skipUnitTests}</skipExec>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+ <properties>
+ <skipUnitTests>true</skipUnitTests>
+ <!--
+ Following is the default jgroups mcast address. If you find the testsuite runs very slowly, there
+ may be problems with multicast on the interface JGroups uses by default on your machine. You can
+ try to resolve setting 'jgroups.bind_addr' as a system-property to the jvm launching maven and
+ setting the value to an interface where you know multicast works
+ -->
+ <jgroups.bind_addr>127.0.0.1</jgroups.bind_addr>
+ </properties>
+
+ <profiles>
+ <profile>
+ <id>test</id>
+ <activation>
+ <activeByDefault>false</activeByDefault>
+ </activation>
+ <properties>
+ <skipUnitTests>false</skipUnitTests>
+ </properties>
+ </profile>
+ </profiles>
+</project>
Deleted: core/tags/hibernate-3.3.0.GA/cache-oscache/pom.xml
===================================================================
--- core/branches/Branch_3_3/cache-oscache/pom.xml 2008-08-14 15:58:54 UTC (rev 15071)
+++ core/tags/hibernate-3.3.0.GA/cache-oscache/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
@@ -1,31 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-parent</artifactId>
- <version>3.3.0-SNAPSHOT</version>
- <relativePath>../parent/pom.xml</relativePath>
- </parent>
-
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-oscache</artifactId>
- <packaging>jar</packaging>
-
- <name>Hibernate OSCache Integration</name>
- <description>Integration of Hibernate with OSCache</description>
-
- <dependencies>
- <dependency>
- <groupId>${groupId}</groupId>
- <artifactId>hibernate-core</artifactId>
- <version>${version}</version>
- </dependency>
- <dependency>
- <groupId>opensymphony</groupId>
- <artifactId>oscache</artifactId>
- <version>2.1</version>
- </dependency>
- </dependencies>
-</project>
\ No newline at end of file
Copied: core/tags/hibernate-3.3.0.GA/cache-oscache/pom.xml (from rev 15083, core/branches/Branch_3_3/cache-oscache/pom.xml)
===================================================================
--- core/tags/hibernate-3.3.0.GA/cache-oscache/pom.xml (rev 0)
+++ core/tags/hibernate-3.3.0.GA/cache-oscache/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
@@ -0,0 +1,31 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-parent</artifactId>
+ <version>3.3.0.GA</version>
+ <relativePath>../parent/pom.xml</relativePath>
+ </parent>
+
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-oscache</artifactId>
+ <packaging>jar</packaging>
+
+ <name>Hibernate OSCache Integration</name>
+ <description>Integration of Hibernate with OSCache</description>
+
+ <dependencies>
+ <dependency>
+ <groupId>${groupId}</groupId>
+ <artifactId>hibernate-core</artifactId>
+ <version>${version}</version>
+ </dependency>
+ <dependency>
+ <groupId>opensymphony</groupId>
+ <artifactId>oscache</artifactId>
+ <version>2.1</version>
+ </dependency>
+ </dependencies>
+</project>
\ No newline at end of file
Deleted: core/tags/hibernate-3.3.0.GA/cache-swarmcache/pom.xml
===================================================================
--- core/branches/Branch_3_3/cache-swarmcache/pom.xml 2008-08-14 15:58:54 UTC (rev 15071)
+++ core/tags/hibernate-3.3.0.GA/cache-swarmcache/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
@@ -1,31 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-parent</artifactId>
- <version>3.3.0-SNAPSHOT</version>
- <relativePath>../parent/pom.xml</relativePath>
- </parent>
-
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-swarmcache</artifactId>
- <packaging>jar</packaging>
-
- <name>Hibernate SwarmCache Integration</name>
- <description>Integration of Hibernate with SwarmCache</description>
-
- <dependencies>
- <dependency>
- <groupId>${groupId}</groupId>
- <artifactId>hibernate-core</artifactId>
- <version>${version}</version>
- </dependency>
- <dependency>
- <groupId>swarmcache</groupId>
- <artifactId>swarmcache</artifactId>
- <version>1.0RC2</version>
- </dependency>
- </dependencies>
-</project>
\ No newline at end of file
Copied: core/tags/hibernate-3.3.0.GA/cache-swarmcache/pom.xml (from rev 15083, core/branches/Branch_3_3/cache-swarmcache/pom.xml)
===================================================================
--- core/tags/hibernate-3.3.0.GA/cache-swarmcache/pom.xml (rev 0)
+++ core/tags/hibernate-3.3.0.GA/cache-swarmcache/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
@@ -0,0 +1,31 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-parent</artifactId>
+ <version>3.3.0.GA</version>
+ <relativePath>../parent/pom.xml</relativePath>
+ </parent>
+
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-swarmcache</artifactId>
+ <packaging>jar</packaging>
+
+ <name>Hibernate SwarmCache Integration</name>
+ <description>Integration of Hibernate with SwarmCache</description>
+
+ <dependencies>
+ <dependency>
+ <groupId>${groupId}</groupId>
+ <artifactId>hibernate-core</artifactId>
+ <version>${version}</version>
+ </dependency>
+ <dependency>
+ <groupId>swarmcache</groupId>
+ <artifactId>swarmcache</artifactId>
+ <version>1.0RC2</version>
+ </dependency>
+ </dependencies>
+</project>
\ No newline at end of file
Deleted: core/tags/hibernate-3.3.0.GA/changelog.txt
===================================================================
--- core/branches/Branch_3_3/changelog.txt 2008-08-14 15:58:54 UTC (rev 15071)
+++ core/tags/hibernate-3.3.0.GA/changelog.txt 2008-08-14 21:11:12 UTC (rev 15084)
@@ -1,2625 +0,0 @@
-Hibernate Changelog
-===================
-Note: Newer entries are automatically generated and the description might not
-match the actual issue resolution (i.e. a bug might not be a bug). Please
-refer to the particular case on JIRA using the issue tracking number to learn
-more about each case.
-
-
-Changes in version 3.3.0.GA (2008.08.13)
--------------------------------------------
-
-** Bug
- * [HHH-3430] - distribution bundles cglib directly instead of the hibernate repackaging
-
-
-Changes in version 3.3.0.CR2 (2008.07.31)
--------------------------------------------
-
-** Bug
- * [HHH-1697] - OracleDialect fails to recognize sequence accessible through syonyms when validating schema
- * [HHH-2604] - Isolator.JdbcDelegate masks the exception if it isn't possible to open a connection.
- * [HHH-2683] - "datediff" is declared as NoArgSQLFunction in H2Dialect, but actually accepts 3 arguments.
- * [HHH-3006] - ConcurrentModificationException in AbstractBatcher results in infinite loop
- * [HHH-3229] - Merge can fail when there is a transient entity reachable by multiple paths and at least one path does not cascade on merge
- * [HHH-3257] - Content images not displayed
- * [HHH-3260] - Hibernate wraps a listener init or destroy exception into an AssertionFailure
- * [HHH-3261] - Do not wrap exceptions raised by event listeners (at init or destroy time)
- * [HHH-3265] - change license url in pom to http://www.gnu.org/licenses/lgpl-2.1.html
- * [HHH-3266] - distribution bundle missing jta dependency
- * [HHH-3272] - using of Integer.valueOf(int), which is not available in JDK 1.4
- * [HHH-3282] - DB2Dialect should report supportsLobValueChangePropogation() == false
- * [HHH-3309] - Serialize/Deserialize problem in AbstractLazyInitializer with entitymode.MAP.
- * [HHH-3409] - ResultTransformers need smarter equals() and hashCode() impls
-
-** Improvement
- * [HHH-1786] - JTASessionContext.CleanupSynch does not remove sessions from currentSessionMap
- * [HHH-2060] - To be able to use <generator> with <composite-id>
- * [HHH-2506] - Make javassist the default ByteCodeProvider
- * [HHH-2875] - repackage cglib/asm under org.hibernate namespace
- * [HHH-3269] - upgrade to jDocBook plugin version 2.1.1
- * [HHH-3283] - protect BulkManipulationTest#testInsertWithGeneratedTimestampVersion where Dialect#supportsParametersInInsertSelect == false
- * [HHH-3358] - Enable JTATransactionFactory and JTATransaction factory to work without JNDI
- * [HHH-3390] - Use READ_COMMITTED for JBC 2 cache
-
-** Patch
- * [HHH-3294] - Version incorrectly incremented for unchanged persistent entity that is parent of a one to many relationship
-
-** Task
- * [HHH-3270] - follow up on documentation license questions
-
-
-
-Changes in version 3.3.0.CR1 (2008.04.28)
--------------------------------------------
-
-** Bug
- * [HHH-1312] - Unclosed ResultSet when using Identity
- * [HHH-1396] - Table.validateColumns fails on valid column
- * [HHH-1569] - Immutable Natural Id check fails with ArrayIndexOutOfBounds in some cases
- * [HHH-1593] - Infinite loop/StackOverflow when calling configuration.setListener(null)
- * [HHH-1753] - DB2Dialect.getCurrentTimestampSQLFunctionName() uses Oracle syntax
- * [HHH-1916] - param values in generator element should be trimmed during HbmBinding
- * [HHH-1920] - Incorrect documentation regarding XML manipulation in Hibernate reference manual (chapter 18.3).
- * [HHH-1956] - Interceptor.afterTransactionCompletion not called with JTATransaction (CacheSynchronization.hibernateTransaction not set)
- * [HHH-2159] - NullPointerException in FromElement#findIntendedAliasedFromElementBasedOnCrazyJPARequirements with 'hibernate.query.jpaql_strict_compliance' enabled
- * [HHH-2164] - Minor bug in section "20.1.1. Customizing the schema"
- * [HHH-2200] - Memory leak in AbstractBatcher with Generated Properties
- * [HHH-2320] - Regression: optional properties under a <join> tag no longer update properly
- * [HHH-2503] - AbstractEntityPersister swallows JDBCExceptions in processGeneratedProperties
- * [HHH-2513] - Abusive WARN logged during deserialization of replicated SessionFactory
- * [HHH-2542] - NullPointerException in TypeFactory.replaceAssociations for ComponentType
- * [HHH-2553] - New LoadContexts Implementation causing possible performance degradation
- * [HHH-2593] - Keyword UNION is prefixed with "this_." in filter conditions
- * [HHH-2616] - No event is fired on Collection recreate/remove/update action
- * [HHH-2627] - Generated properties leak prepared statements in Hibernate 3.2.3 and higher.
- * [HHH-2631] - Leaking PreparedStatement and ResultSet via CollectionLoadContext instances maintained in Map collectionLoadContexts in LoadContexts
- * [HHH-2711] - PropertyAccessException with backref and <composite-map-key/>
- * [HHH-2726] - spelling o your CLASSPATH
- * [HHH-2728] - Calling session.clear() while retrieving objects via an iterator will cause a "LazyInitializationException - No Session" by the CGLIBLazyInitializer
- * [HHH-2788] - Oracl8iDialect No Dialect mapping for JDBC type 91
- * [HHH-2795] - CollectionLoadContexts for empy collections are not removed until PersistenceContext.clear()
- * [HHH-2816] - DefaultFlushEntityEventListener.checkNaturalId() causes extra SELECTs on read-only entities
- * [HHH-2833] - insert-select query fails with NPE when select includes join
- * [HHH-2857] - schemaSupport for HSQLDialect remote connections doesn't work
- * [HHH-2861] - cascade="delete-orphan,all" is ignored
- * [HHH-2863] - testsuite fix-ups for maven and/or directory changes
- * [HHH-2864] - Merging a detached instance with a new child in a unidirectional one-to-many association fails if the parent was previously loaded as a proxy
- * [HHH-2892] - skip up-to-date checks of query cache for natural-id only if immutable
- * [HHH-2928] - optimizers for enhanced id generators should be synchronized against multi-threaded access
- * [HHH-2948] - QueryStatistics.executionMinTime always = 0
- * [HHH-3111] - WebSphereExtendedJTATransactionLookup$TransactionManagerAdapter.getStatus() implemented incorrect
- * [HHH-3140] - Region prefix ignored for entities and collections
-
-** Deprecation
- * [HHH-2755] - Wrong "jsdk.jar" referenced in the tutorial
-
-** Improvement
- * [HHH-1786] - JTASessionContext.CleanupSynch does not remove sessions from currentSessionMap
- * [HHH-2048] - Incomplete MappingException at org.hibernate.mapping.SimpleValue
- * [HHH-2156] - Section 19.3, "Managing the caches" doesn't document CacheMode.IGNORE
- * [HHH-2533] - redesign Cache/CacheProviders
- * [HHH-2662] - Workaround PostgreSQL issues in testsuite
- * [HHH-2663] - Map java.sql.Types.REAL to Hibernate FloatType for auto-discovery stuff
- * [HHH-2665] - Split Oracle9Dialect into Oracle9iDialect and Oracle10gDialect
- * [HHH-2669] - Unequivocally map MySQL LOB types to the LONG variant
- * [HHH-2682] - support for auto-discovery of H2 dialect
- * [HHH-2696] - Consider migrating to slf4j
- * [HHH-2761] - Handle null and empty string consistently in PropertiesHelper
- * [HHH-2778] - TransactionManagerLookup implementation for Bitronix Transaction Manager
- * [HHH-2789] - Section 19.2 of the documentation does not show OSCache as supporting clusters. It does.
- * [HHH-2822] - timestamp extraction functions for SAPDBDialect
- * [HHH-2826] - IS [NOT] NULL checks with component values
- * [HHH-2859] - Introduce a 'Work' API for user to perform JDBC work
- * [HHH-3131] - Add a method to ActionQueue to tell whether there are currently entries in the executions collection
-
-** New Feature
- * [HHH-1] - Optimize Hibernate for the bulk insertion of related entities
- * [HHH-2555] - Create new RegionFactory for JBossCache
- * [HHH-2884] - Provide a sessionFactory close event or hook for the event listeners
-
-** Patch
- * [HHH-952] - Patch to allow subqueries with joins using Criteria API and Subqueries with DetachedCriteria
- * [HHH-2070] - Expand DB2Dialect auto-discovery support (Martin Renner)
- * [HHH-2519] - Schema dropping not documented with hibernate.hbm2ddl.auto=create
- * [HHH-2630] - Hibernate Dialect is not auto-detected for Sybase ASE and DB2 (Shelley McGowan)
- * [HHH-2758] - Patch IngresDialect based on certification
- * [HHH-2839] - Don't use dummy dual table for hsqldb (David Bala?ic)
- * [HHH-2849] - Better error logging in IdentifierGeneratorFactory (Antony Stubbs)
- * [HHH-2957] - ActionQueue Insertion sort performance degrades exponentially (Jay Erb)
- * [HHH-3084] - DialectFactory detection of Ingres metadata (Michael Leo)
-
-** Task
- * [HHH-2702] - Officially move to JDK 1.4
- * [HHH-2704] - Migrate to Maven2 for build
-
-
-Changes in version 3.2.6 (2008.02.07)
--------------------------------------------
-
-** Bug
- * [HHH-925] - DetachedCriteria.createCriteria not working with alias
- * [HHH-1312] - Unclosed ResultSet when using Identity
- * [HHH-1329] - SchemaValidator fail when views are involved
- * [HHH-1593] - Infinite loop/StackOverflow when calling configuration.setListener(null)
- * [HHH-1685] - DetachedCriteria doesn't create alias on subcriteria
- * [HHH-1753] - DB2Dialect.getCurrentTimestampSQLFunctionName() uses Oracle syntax
- * [HHH-1916] - param values in generator element should be trimmed during HbmBinding
- * [HHH-1956] - Interceptor.afterTransactionCompletion not called with JTATransaction (CacheSynchronization.hibernateTransaction not set)
- * [HHH-2016] - Oracle9Dialect registers last_day() function as "lastday"
- * [HHH-2159] - NullPointerException in FromElement#findIntendedAliasedFromElementBasedOnCrazyJPARequirements with 'hibernate.query.jpaql_strict_compliance' enabled
- * [HHH-2200] - Memory leak in AbstractBatcher with Generated Properties
- * [HHH-2261] - Setting hibernate.hbm2ddl.auto=validate causes problems on mySQL with numeric fields
- * [HHH-2320] - Regression: optional properties under a <join> tag no longer update properly
- * [HHH-2503] - AbstractEntityPersister swallows JDBCExceptions in processGeneratedProperties
- * [HHH-2542] - NullPointerException in TypeFactory.replaceAssociations for ComponentType
- * [HHH-2593] - Keyword UNION is prefixed with "this_." in filter conditions
- * [HHH-2598] - Mapping a collection of entities from two different classes with the same collection name results in duplicate backref property exception if collection keys are not null
- * [HHH-2616] - No event is fired on Collection recreate/remove/update action
- * [HHH-2627] - Generated properties leak prepared statements in Hibernate 3.2.3 and higher.
- * [HHH-2728] - Calling session.clear() while retrieving objects via an iterator will cause a "LazyInitializationException - No Session" by the CGLIBLazyInitializer
- * [HHH-2788] - Oracl8iDialect No Dialect mapping for JDBC type 91
- * [HHH-2795] - CollectionLoadContexts for empy collections are not removed until PersistenceContext.clear()
- * [HHH-2816] - DefaultFlushEntityEventListener.checkNaturalId() causes extra SELECTs on read-only entities
- * [HHH-2833] - insert-select query fails with NPE when select includes join
- * [HHH-2857] - schemaSupport for HSQLDialect remote connections doesn't work
- * [HHH-2861] - cascade="delete-orphan,all" is ignored
- * [HHH-2864] - Merging a detached instance with a new child in a unidirectional one-to-many association fails if the parent was previously loaded as a proxy
- * [HHH-2892] - skip up-to-date checks of query cache for natural-id only if immutable
- * [HHH-2928] - optimizers for enhanced id generators should be synchronized against multi-threaded access
- * [HHH-2948] - QueryStatistics.executionMinTime always = 0
-
-** Improvement
- * [HHH-1630] - duplicate property mapping - more details
- * [HHH-1696] - Add outer join support for aliases on DetachedCriteria
- * [HHH-2048] - Incomplete MappingException at org.hibernate.mapping.SimpleValue
- * [HHH-2682] - support for auto-discovery of H2 dialect
- * [HHH-2761] - Handle null and empty string consistently in PropertiesHelper
- * [HHH-2822] - timestamp extraction functions for SAPDBDialect
- * [HHH-2826] - IS [NOT] NULL checks with component values
- * [HHH-2852] - Better error messages when schema validation fails
-
-** Patch
- * [HHH-952] - Patch to allow subqueries with joins using Criteria API and Subqueries with DetachedCriteria
- * [HHH-2070] - Expand DB2Dialect auto-discovery support (Martin Renner)
- * [HHH-2839] - Don't use dummy dual table for hsqldb (David Bala?ic)
- * [HHH-2849] - Better error logging in IdentifierGeneratorFactory (Antony Stubbs)
- * [HHH-2957] - ActionQueue Insertion sort performance degrades exponentially (Jay Erb)
- * [HHH-3084] - DialectFactory detection of Ingres metadata (Michael Leo)
-
-** Task
- * [HHH-2559] - http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd needs to be updated
- * [HHH-3085] - Remove connector.jar (unnecessary library)
- * [HHH-3086] - Remove jdbc2_0-stdext.jar (unnecessary library)
-
-
-Changes in version 3.2.5 (2007.07.31)
--------------------------------------------
-
-** Bug
- * [HHH-1116] - batch-size typo
- * [HHH-1561] - Missing " in Documentation for H3, Chapter 15.8
- * [HHH-1569] - Immutable Natural Id check fails with ArrayIndexOutOfBounds in some cases
- * [HHH-1694] - Documentation Outdated: "10.4.4. Queries in native SQL"
- * [HHH-2180] - minordocumentation error in hbm xml
- * [HHH-2201] - session.iterate() does not exist
- * [HHH-2267] - A copy/paste mistake in the documentation for <schemavalidator> ant task
- * [HHH-2334] - Documentation error in section 5.1.3
- * [HHH-2420] - Error in 2.5. Contextual Sessions
- * [HHH-2502] - The second level caching documentation states that ehcache is not distributed.
- * [HHH-2631] - Leaking PreparedStatement and ResultSet via CollectionLoadContext instances maintained in Map collectionLoadContexts in LoadContexts
- * [HHH-2649] - Batcher configuration parameter incorrectly documented
- * [HHH-2711] - PropertyAccessException with backref and <composite-map-key/>
- * [HHH-2713] - duplicated phrase in docs "of the of the"
- * [HHH-2714] - Three typos in code examples
- * [HHH-2719] - adddress --> address
- * [HHH-2720] - Monetory --> Monetary
-
-** Improvement
- * [HHH-1022] - incomplete documentation in _README.txt in the lib directory
- * [HHH-1682] - Improve the description of differences between save() and persist()
- * [HHH-2048] - Incomplete MappingException at org.hibernate.mapping.SimpleValue
- * [HHH-2417] - Update book on Hibernate reference
- * [HHH-2418] - Refer HSQL DB website in chapter 1.2.3
- * [HHH-2487] - Typo in "5.1.7. version (optional)"
- * [HHH-2550] - Update API Class in 10.4.3. Criteria queries
- * [HHH-2662] - Workaround PostgreSQL issues in testsuite
- * [HHH-2663] - Map java.sql.Types.REAL to Hibernate FloatType for auto-discovery stuff
- * [HHH-2665] - Split Oracle9Dialect into Oracle9iDialect and Oracle10gDialect
-
-** Patch
- * [HHH-2520] - Miscellaneous config doc spelling fixes
- * [HHH-2630] - Hibernate Dialect is not auto-detected for Sybase ASE and DB2 (Shelley McGowan)
- * [HHH-2758] - Patch IngresDialect based on certification
-
-** Task
- * [HHH-2551] - Deprecate org.hibernate.criterion.Expression
- * [HHH-2566] - Replace usages of FlushMode.NEVER with FlushMode.MANUAL
- * [HHH-2567] - Update reference to use FlushMode.MANUAL
- * [HHH-2568] - Hibernate javadoc overview refering wrong classes and packages
-
-
-Changes in version 3.2.4.sp1 (2007.05.18)
--------------------------------------------
-
-** Bug
- * [HHH-2605] - Since 3.2.4 no value specified for row id
- * [HHH-2613] - LockMode.FORCE on non versioned entity leads to NPE
-
-
-Changes in version 3.2.4 (2007.05.09)
--------------------------------------------
-
-** Bug
- * [HHH-511] - reattach object from same session
- * [HHH-2316] - org.hibernate.cache.CacheKey.equals() can cause PropertyAccessException to be thrown
- * [HHH-2553] - New LoadContexts Implementation causing possible performance degradation
- * [HHH-2602] - instrumented many-to-one problem with aggressive release
-
-** Deprecation
- * [HHH-2603] - Deprecate the Session.connection() method
-
-** Improvement
- * [HHH-2549] - Warn users explicitly about schemaexport and schemaupdate does not support annotations
-
-** New Feature
- * [HHH-1] - Optimize Hibernate for the bulk insertion of related entities
-
-** Patch
- * [HHH-2301] - Identity generator with custom insert SQL broken in 3.2 (Scott Rankin and Gail Badner)
- * [HHH-2336] - paremeterizable and typedef-able UserCollectionType (Holger Brands)
- * [HHH-2580] - Performace: Too many lookups of WAS extended transaction support (Jesper Udby)
-
-
-Changes in version 3.2.3 (2007.04.02)
--------------------------------------------
-
-** Bug
- * [HHH-2376] - Query with fully qualified entity class fails
- * [HHH-2392] - LockModes referencing non-root joined-subclass class in HQL/Criteria
- * [HHH-2393] - Generated properties leave open ResultSet on Batcher to be closed on transaction completion
- * [HHH-2397] - hilo generator can generate negative numbers because of arithmetic overflow
- * [HHH-2469] - ArrayIndexOutOfBoundsException during update by rowid
- * [HHH-2476] - PersistentMap.put() incorrect on uninitialized, non-extra-lazy map
- * [HHH-2481] - Big memory leak in the use of CGLIB
- * [HHH-2499] - incorrect assertion failure relating to generated property values
- * [HHH-2513] - Abusive WARN logged during deserialization of replicated SessionFactory
- * [HHH-2521] - Fix cascading of merge across component properties
- * [HHH-2532] - update/delete executeUpdate() causes problems with JBossCache (at least in opt-locking setups)
-
-** Improvement
- * [HHH-2495] - encapsulate the notion of state pertaining to processing a result set
- * [HHH-2534] - better error message for illegal 'collection dereference' in HQL query
- * [HHH-2535] - Change Cache' Cache71Dialect so that sequence support returns false
-
-** New Feature
- * [HHH-2471] - create a set of "enhanced" generators
- * [HHH-2500] - apply Terradata certification results
-
-** Patch
- * [HHH-2367] - InformixDialect uses wrong data type
- * [HHH-2489] - SQL comments for HQL bulk operations
-
-
-Changes in version 3.2.2 (2007.01.24)
--------------------------------------------
-
-** Bug
- * [HHH-1471] - If the 'generated' attribute is set to 'insert' or 'always' on the property of a component it is ignored and the value is not read from the database.
- * [HHH-1646] - Bad code in FastClass.equals
- * [HHH-1889] - LockMode.UPGRADE not applied in all cases for SQL Server / Sybase
- * [HHH-2112] - ClassCastException in StatefulPersistenceContext.getCachedDatabaseSnapshot(...)
- * [HHH-2221] - MySQL temp table DDL and isolation
- * [HHH-2238] - SQLQuery executeUpdate doesn't respect Query.setFlushMode()
- * [HHH-2251] - Settings build unnecessary in schemaupdate/schemavalidate
- * [HHH-2257] - Query.iterate() results differ from Query.list() 2
- * [HHH-2259] - autoflush and autoclose not longer occur in JTA environment with hibernate 3.2
- * [HHH-2264] - NPE when NamedQuery contains space before variable name
- * [HHH-2274] - Collection ordering when many to many order by is used is not respected
- * [HHH-2275] - Mapping a composite element as a map key using formulas can lead to AOOBE
- * [HHH-2284] - HQL: selecting components inside components doesn't work
- * [HHH-2291] - collection based on property-ref not handled correctly during reattch
- * [HHH-2292] - merge detached instance fails to persist collection changes in case of bare collection reference
- * [HHH-2356] - NullableType.toString(Object) should account for nulls
- * [HHH-2366] - Changing a component's value does not trigger an update during flush
- * [HHH-2378] - replicate() of non-versioned entiy can result in wrong value for version in entity cache
-
-** Improvement
- * [HHH-1851] - relax special handling of 'id' property
- * [HHH-2130] - SQLQuery does not autoflush all entities used in the query
- * [HHH-2193] - Introduce a flag to avoid checking NamedQuery at startup
- * [HHH-2242] - Consider Allowing Optimistic Lock Strategies other than 'Version' with joined-subclass
- * [HHH-2250] - Create an appropriate error message if Query.setEntity is passed a NULL value
- * [HHH-2282] - PersistentClass property lookups do not properly account for embedded composite identifiers
- * [HHH-2286] - dialect informational metadata
- * [HHH-2372] - Allow tooling to create Settings via SettingsFactory without contacting the db
-
-** New Feature
- * [HHH-2246] - No way to specify CACHE_PROVIDER_CONFIG in HibernateServiceMBean
-
-** Patch
- * [HHH-2300] - Updated dialect for H2 database engine
- * [HHH-2371] - enhancements to C3P0ConnectionProvider
-
-** Task
- * [HHH-2032] - update c3p0 to 0.9.1
-
-
-
-Changes in version 3.2.1 (2006.11.16)
--------------------------------------------
-
-** Bug
- * [HHH-939] - 'class' property in HQL results in incorrect SQL for joined-subclass
- * [HHH-1401] - session.merge() executes unnecessary updates when one-to-many relationship is defined.
- * [HHH-1460] - Inconsistent behavior when using Session.get() with multiple subclasses
- * [HHH-1564] - deleting versioned object with collection leads to unecessary update
- * [HHH-1629] - SchemaUpdate/validator doesn't listen to quoting
- * [HHH-1631] - Missing table in SQL from clause that is referenced in where clause when using joined subclass
- * [HHH-1651] - hibernate does not find an existing sequence from an Oracle database
- * [HHH-1663] - <any/> with collection will produce "AssertionFailure: collection was not processed by flush()"
- * [HHH-1737] - Add a ConnectionWrapper interface to allow access to the underlying connection from a BorrowedConnectionProxy
- * [HHH-1756] - Proxy objects are not removed from the BatchFetchQueue during a session evict
- * [HHH-1774] - Component parameters bound incorrectly
- * [HHH-1921] - "dirty, but no dirty properties" thrown when Interceptor resets properties.
- * [HHH-1986] - javassist throws InvocationTargetException instead of original checked Exception
- * [HHH-2027] - merge listener over-writes Interceptor changes to component state for a transient entity
- * [HHH-2044] - DefaultMergeEventListener.entityIsDetached call StaleObjectStateException with wrong identifier
- * [HHH-2082] - UpdateTimestampsCache.isUpToDate returns before checking all spaces
- * [HHH-2108] - cacheable files broken
- * [HHH-2138] - merge with bidirectional one-to-one may fail
- * [HHH-2145] - set.retainAll calling set.addAll
- * [HHH-2174] - Wrong log message in SessionImpl.afterTransactionCompletion(...)
- * [HHH-2199] - Unique constraints on nullable columns should not be generated with unique-key is used and supportsNotNullUnique=false
- * [HHH-2202] - Clearing the connection warnings even when log is > WARN to workaround a Sybase issue
- * [HHH-2206] - SessionImpl tries to deserialize itself in an incorrect order
- * [HHH-2207] - Suggested fix for HQL - MySQL setMaxResults issue
- * [HHH-2226] - org.hibernate.hql.ast.tree.FromElementType contains warning log message that should be debug instead
- * [HHH-2229] - Performance issue with fix for HHH-1293, CGLIBLazyInitializer may be slower for certain Java classes
- * [HHH-2236] - Lazy property + setReadOnly + Instrumented classes results in NullPointerException when accessing lazy property
-
-** Improvement
- * [HHH-2037] - provide Query.setProperties(Map)
- * [HHH-2042] - Typo in FlushMode.MANUAL Javadoc
- * [HHH-2057] - Add "remove" cascading style to CascadeStyle for XML mappings
- * [HHH-2127] - Document <filter-def condition="defaultCondition"> and <filter-def>defaultCondition
- * [HHH-2135] - Hibernate Deserialization: In org.hibernate.type.SerializableType the code makes a test for the return of a null object by simply testing the object as to whether or not it is null.
- * [HHH-2185] - introduce setting to control cglib caching of classes
- * [HHH-2203] - Make Post*Events extend AbstractEvent
- * [HHH-2208] - Table schema use in DatabaseMetadata
- * [HHH-2209] - ehcache.jar is old and does not contain the SingletonCacheProvider which are advised in exception messages
- * [HHH-2217] - Collection write methods and dirtying the collection
-
-** New Feature
- * [HHH-2205] - Dialect for Intersystems' Cache SQL 2007.1
-
-** Patch
- * [HHH-1767] - read-only cache for immutable collection causes unnecessary warning
-
-** Task
- * [HHH-2219] - Upgrade to Javassist 3.4
-
-
-Changes in version 3.2.0.ga (16.10.2006)
------------------------------------------
-(retag of 3.2.0.cr5 (2006.10.16))
-
-Changes in version 3.2.0.cr5 (04.10.2006)
--------------------------------------------
-
-** Bug
- * [HHH-1668] - PersistentSet write methods mark collection as dirty even if entry is not written
- * [HHH-1714] - Session.get() behavior
- * [HHH-1891] - Since rc3 deprecation Warning: The syntax 'TYPE=storage_engine' is deprecated and will be removed in MySQL 5.2.
-
-** Improvement
- * [HHH-2093] - PERSIST_ON_FLUSH ineffective for recursive object graphs
- * [HHH-2103] - Rolling back 'SELECT is mandatory' on JPA strict compliance
-
-** Task
- * [HHH-1931] - verify that the instrument tasks actually work
-
-
-Changes in version 3.2.0.cr4 (24.08.2006)
--------------------------------------------
-
-** Bug
- * [HHH-1293] - java.lang.NoSuchMethodError: <persistent class>.getHibernateLazyInitializer()
- * [HHH-1677] - optimistic-lock="dirty|all" is ignored at delete time
- * [HHH-1710] - persistent collections with property-ref to secondary tables cannot be joined in HQL
- * [HHH-1713] - AbstractEntityPersister causes an exception when a row in a joined table is missing with fetch="select"
- * [HHH-1740] - Build-time instrumentation breaks lazy="proxy"
- * [HHH-1750] - Exception ORA-01000 too many open cursors by generated="insert"
- * [HHH-1806] - No Dialect mapping for JDBC type: 3
- * [HHH-1848] - A session.lock generates a query with a version column in a joined subclass which does not exist
- * [HHH-1892] - finish HHH-1789 for ordered and sorted collections
- * [HHH-1898] - With hibernate 3.2.0-cr3 there is an hql parsing error on a one-to-one relation
- * [HHH-1924] - ForeignKeys: TransientObjectException is thrown without a message because of a wrong bracket in the code
- * [HHH-1927] - persist() and then merge() not handled correctly for multiple entity instances representing the same logical state
- * [HHH-1937] - Proxy creation failure leads to NPEs
- * [HHH-1943] - PersistenceContext not checked to see whether the associated entity is transient or not
- * [HHH-1944] - generated subqueries and jpaql compliance (derived select clause) check
- * [HHH-1947] - OF part of MEMBER OF is optional
- * [HHH-1948] - Query Idetification variables are case insensitive in JPA
- * [HHH-1949] - having trim(BOTH from c.name) translated into having ltrim(rtrim(BOTH)) on DB2
- * [HHH-1954] - Proxies are never unassociated (evicted) from a session
- * [HHH-1958] - session.lock(LockMode.FORCE) can lead to NPE
- * [HHH-1963] - meta inheritance broken
- * [HHH-1992] - Some cascade actions should not trigger a property access on lazy properties
- * [HHH-2001] - javaassist does not setup the proper protection domain thus does not work with signed/secured deployments such as webstart
- * [HHH-2015] - where= does not set parenthesis leading to unexpected query when multiclause are used
- * [HHH-2017] - locate function defined on Oracle9Dialect is incorrect
- * [HHH-2022] - property names beginning with underscores cause Hibernate to generate invalid aliases
-
-** Improvement
- * [HHH-1470] - Enhance Hibernate-Mapping DTD Definition of type element
- * [HHH-1934] - logging NonUniqueObjectException and WrongClassException
- * [HHH-1941] - Be more specific about x not found and invalid mapping exceptions to allow tools to tell about it
- * [HHH-1968] - unify bytecode instrumentation
- * [HHH-1980] - disallow the mapping combination of <version/> and optimistic-lock
- * [HHH-2005] - more standard build script
- * [HHH-2023] - performance optimization of JTATransactionFactory.isTransactionInProgress()
-
-** Patch
- * [HHH-1271] - When using Stored Procedure for update or delete, the check is not done correctly.
-
-** Task
- * [HHH-1931] - verify that the instrument tasks actually work
-
-
-Chages in version 3.2 cr3 (2006.07.06)
--------------------------------------------
-
-** Bug
- * [HHH-1452] - Native SQL query is missing join if entity includes many-to-one on secondary table
- * [HHH-1507] - one-to-one can have formula or meta but not both of them.
- * [HHH-1552] - Error when using ?1 and parameterList
- * [HHH-1586] - ClassCastException in CollectionType.toLoggableString if using CustomCollectionType
- * [HHH-1732] - EhCache.toMap still assumes Serializable objects
- * [HHH-1734] - Connection leak when using hilo strategy in SE environment
- * [HHH-1741] - Bug in reference documentation
- * [HHH-1746] - NullPointerException at IdentNode.resolveAsNakedComponentPropertyRefLHS(IdentNode.java:195
- * [HHH-1748] - Setting a comment that contains a single quote on a query results in an unintuitive exception
- * [HHH-1763] - Bug in InputStream org.hibernate.util.ConfigHelper.getResourceAsStream(String resource)
- * [HHH-1791] - property update="false" ignored since 3.2.0.cr2
- * [HHH-1816] - serializing session from a named session factory to a different vm broken
- * [HHH-1822] - flushing entity linked to transient instance (non cascaded) should always fail
- * [HHH-1828] - registering a transaction marked for Rollback is illegal
- * [HHH-1833] - Not Generating HibernateException
- * [HHH-1838] - Wrong SQL generated for hql query on "any" relation
- * [HHH-1855] - booleans not properly handled in assignment clause of UPDATE statements
- * [HHH-1858] - wrong sql generated against many-to-any association table
- * [HHH-1871] - query type autodiscovery assume wrong column when mixing entities and scalars
-
-** Deprecation
- * [HHH-1792] - Callable update/insert/delete statements should not force rowcount out parameter
-
-** Improvement
- * [HHH-1617] - Check the second-level cache before adding a PK to a batch fetch
- * [HHH-1773] - Typo in ImprovedNamingStrategy
- * [HHH-1779] - Allow Session.remove() on transient object
- * [HHH-1789] - improve efficiency of collection initialization from L2 cache hits
- * [HHH-1795] - default cache provider to NoCacheProvider
- * [HHH-1796] - TreeCache based providers and Fqn
- * [HHH-1800] - session.get() / load() should raise exception when the id is of the wrong type
- * [HHH-1818] - remove() should force subsequent contains() calls to return false
- * [HHH-1831] - Batch loading the same EntityKey (one side of manytoone ) more than once
- * [HHH-1861] - More complete component handling in HQL
- * [HHH-1881] - introduce LoggableUserType interface
-
-** New Feature
- * [HHH-1709] - Be able to raise ENFE rather than LIE in proxies
- * [HHH-1727] - Add a SQLFunctionRegistry
- * [HHH-1817] - Introduce setting for JPA-QL strict compliance
- * [HHH-1826] - Built-in type for char[] -> VARCHAR Byte[] and Character[]
-
-** Patch
- * [HHH-1558] - Dialect for new database engine H2
- * [HHH-1847] - QBE 'like' clause with backslashes don't work with MySQL
-
-** Task
- * [HHH-1839] - rename FlushMode.NEVER -> FlushMode.MANUAL
-
-
-Changes in version 3.2 cr2 (2006.05.05)
--------------------------------------------
-
-** Bug
- * [HHH-1114] - The first (HSQL) Hibernate Application doesn't work as expected due to lack of database shutdown
- * [HHH-1175] - Exception when loading inheritance mapping in single file
- * [HHH-1560] - PropertiesHelper.resolvePlaceHolders() fails with non-String values in System properties
- * [HHH-1620] - Errors on max_lo <=1 boundaries
- * [HHH-1625] - Hibernate.isPropertyInitialized() returns false on instrumented transient object
- * [HHH-1648] - Exception while resuming a transaction is silently eaten
- * [HHH-1674] - Configuration serialization error: filterDefinitions map not serializable
- * [HHH-1695] - subsequent calls to non-existent proxy causes NPE
-
-** Improvement
- * [HHH-1266] - StatelessSession can implement refresh
- * [HHH-1414] - many-to-many and metadata order-by based on column from the target table
- * [HHH-1477] - Improve naming strategy for ANN-195
- * [HHH-1538] - aggregations functions in EJBQL queries does not return the appropriate types
- * [HHH-1670] - Update EhCache and EhCache provider to support EhCache 1.2
- * [HHH-1704] - Deduplicate unique constraints generation sharing the same column(s)
-
-** New Feature
- * [HHH-870] - support SQL updates in named queries
- * [HHH-1591] - Replace LazyInitializationException by EntityNotFoundException
- * [HHH-1719] - Provide a ClassTransformer interface to the BytecodeProvider
-
-
-Changes in version 3.2 cr1 (2006.03.27)
--------------------------------------------
-
-** Bug
- * [HHH-1453] - Broken exception handling in NullableType
-
-** Improvement
- * [HHH-227] - remove reflection optimizer
- * [HHH-587] - Make ResultTransformer available for all query methods
- * [HHH-1588] - delay inserts for insert-generated-identifiers outside transaction
- * [HHH-1590] - redesign how PostInsertIdentifierGenerators are handled at insertion
- * [HHH-1592] - allow SelectGenerator to use a defined natural-id (if one)
-
-** New Feature
- * [HHH-332] - create ability to add resulttransformer to HQL query
- * [HHH-1179] - support inline sequence id generation on Oracle using RETURNING clause
-
-
-Changes in version 3.2 alpha2 (2006.03.15)
--------------------------------------------
-
-** Bug
- * [HHH-535] - properties element causes exception in interface/abstract class
- * [HHH-1325] - ArrayOutOfBounds expected in DatabaseMetadata.isTable when specifing schema
- * [HHH-1435] - many-to-one lazy seems to be broken in 3.1.x
- * [HHH-1531] - NPE with many-to-many and property-ref
- * [HHH-1546] - generated version properties fail with multiple actions per flush
-
-** Improvement
- * [HHH-1540] - Better Error Feedback In CollectionEntry.postFlush(PersistentCollection)
- * [HHH-1555] - ConnectionReleaseMode.AFTER_STATEMENT and flushes
- * [HHH-1559] - introduce TransactionFactory.isTransactionInProgress to facilitate EJB3 joinTransaction handling
-
-
-Changes in version 3.2 alpha1 (2006.02.28)
--------------------------------------------
-
-** Bug
- * [HHH-687] - Exception QuerySyntaxError not really serializable
- * [HHH-1236] - Remove static reference to classloader, to avoid memory leak at webapp reload
- * [HHH-1287] - Problem with WAS ExtendedJTATransaction not available when using MDB
- * [HHH-1419] - Update + Exists doesn't seem to work
- * [HHH-1445] - SchemaUpdate closes shared ConnectionProvider
- * [HHH-1464] - QueryException from Query.getReturnAliases when query uses "fetch"
- * [HHH-1486] - Concurrent access issues with both SoftLimitMRUCache and SimpleMRUCache
- * [HHH-1508] - Session.createQuery() should not flush the session
-
-** Improvement
- * [HHH-1411] - Collection fetches and DISTINCT
- * [HHH-1412] - Collection fetches and firstResult/maxRows
- * [HHH-1416] - LockMode.FORCE to implement EJB3 LockModeType.WRITE
- * [HHH-1457] - support new optimisitc locking capabilities of JBossCache
- * [HHH-1466] - better handling of Antlr exceptions
- * [HHH-1516] - support DataDirect standard jdbc stored procedures
- * [HHH-1518] - Guarentee LockMode behaviors
- * [HHH-1520] - with clause with implied joins within an explicit join
- * [HHH-1526] - Improved DTDEntityResolver
-
-** New Feature
- * [HHH-1251] - Avoid replicating the clearing of TreeCache on SessionFactory..close()
- * [HHH-1410] - FlushMode.AUTO -> COMMIT when outside a transaction
- * [HHH-1447] - pluggable bytecode libraries
-
-
-Changes in version 3.1.2 (01.27.2006)
--------------------------------------------
-
-** Bug
- * [HHH-73] - Statistics for HQL queries use pre-processed query string
- * [HHH-1306] - HQL parsing problem with join fetching of arrays/collections of values
- * [HHH-1370] - Warning in hibernate-mapping-3.0.dtd
- * [HHH-1371] - MappingException is thrown when the same column is referenced with different case
- * [HHH-1386] - Numeric (long) literals not properly handled by HQL parser
- * [HHH-1390] - Session.isOpen() throws exeception when the session is closed with ThreadLocalSessionContext
- * [HHH-1391] - Invalid parameter index SQLException when using named parameters after positional parameters
- * [HHH-1392] - Proxies cannot be serialized after session is closed
- * [HHH-1398] - extends and entity-names broken with mapping-level package attribute
- * [HHH-1407] - return-join broken for entity collections
-
-** Improvement
- * [HHH-1364] - Defensive check of isClosed when obtaining a connection from ConnectionManager
- * [HHH-1367] - warn level log "this operation breaks ==" may be disturbing
-
-** New Feature
- * [HHH-1372] - Support for MySQL5 new varchar length
-
-** Patch
- * [HHH-1005] - Criteria LEFT JOIN capability when adding Order to associations
-
-** Task
- * [HHH-1373] - Document update versioned
-
-
-Changes in version 3.1.1 (01.13.2006)
--------------------------------------------
-
-** Bug
- * [HHH-853] - DML-style HQL queries and associations
- * [HHH-1281] - FORWARD_ONLY ScrollableResults#next() throw GenericJDBCException
- * [HHH-1286] - Set entity in HQL query without prefix -> incorrect SQL
- * [HHH-1308] - Session.createFilter(...).iterate() results in bogus column names for result set extraction
- * [HHH-1314] - float/double literals not sent to the database correctly
- * [HHH-1316] - SchemaUpdate : java.sql.SQLException: You cannot commit during a managed transaction!
- * [HHH-1328] - org.hibernate.util.SimpleMRUCache keeps a soft reference to the cache key, so cached values get collected prematurely
- * [HHH-1336] - ForeignGenerator does not handle transient entities with an entity-name properly
- * [HHH-1337] - Mapped <component> generated column names incorrect with ImprovedNamingStrategy
- * [HHH-1349] - HQL delete statement problem due to oracle lacking table aliases in delete clause
- * [HHH-1361] - creating temporary table for bulk delete will commit current transaction in managed environment such as J2EE
-
-** Improvement
- * [HHH-1019] - Native SQL return-property mapping doesn't support dot-syntax in return-property for components
- * [HHH-1290] - Defensive checking of session status
- * [HHH-1302] - query.getReturnTypes inconsistent
- * [HHH-1304] - better handling of borrowed connections in non-ON_CLOSE release semantics
- * [HHH-1309] - schemaupdate does not handle TableHiLoGenerator
- * [HHH-1339] - empty property name in mapping file gives imcomprehensible error message
- * [HHH-1344] - ANSI-SQL trim function for SQLServer
- * [HHH-1345] - ANSI-SQL mod function for SQLServer
- * [HHH-1346] - ANSI-SQL bit_length function for SQLServer
- * [HHH-1351] - <return-scalar name="blah"/> should be possible
- * [HHH-1360] - set autodiscovery flag for SQLQueries when resultsetmappings are used
-
-
-Changes in version 3.1 (12.12.2005)
--------------------------------------------
-
-** Bug
- * [HHH-849] - Cartesian product + implicit joins
- * [HHH-1065] - user provided connection not usable by default due to agressive release changes
- * [HHH-1101] - associations join fetched in HQL without owner being selected
- * [HHH-1133] - Comparators, defined for collections in mapping files, are not set
- * [HHH-1149] - NPE flushing reattached entity w/ non-mutable natural-id
- * [HHH-1170] - HQL 'cast' function doesn't work with MySQL 4 when casting to string
- * [HHH-1187] - Cannot delete a object having a delete-orphan collection when user_rollback_id is set
- * [HHH-1191] - HQL fails backward compatibility using classic translator
- * [HHH-1194] - hql delete statements with joined-subclass hierarchies with a mapped where attribute at the root
- * [HHH-1206] - Mappings.TableDescription is not serializable
- * [HHH-1212] - mismatch in entity-modes defined in DTD and EntityMode class
- * [HHH-1227] - ClassCastException on DOM4J replicate of Calendar property
- * [HHH-1239] - BinaryArithmeticOperatorNode.getDataType() does not properly handle date/time arithmetic
- * [HHH-1240] - Track connection leakage in JDBCContext.afterTransactionCompletion()
- * [HHH-1245] - Calling the Session should register it with the current JTA txn.
- * [HHH-1254] - Serialization of Sessions using JDBCTransactions with auto-flush/auto-close
-
-** New Feature
- * [HHH-1222] - Autodiscover scalar types in native-sql
- * [HHH-1243] - allow placeholders to system properties in config properties
- * [HHH-1244] - Support for MySQL5 stored procedures
- * [HHH-1260] - Configuration.mergeProperties()
-
-** Task
- * [HHH-1066] - Upgrade CGLIB to fix proxy memory leak
- * [HHH-1242] - upgrade ANTLR to 2.7.6rc1
-
-** Improvement
- * [HHH-860] - insert ... select ... and version numbers
- * [HHH-926] - TypeDef should be global
- * [HHH-1138] - No ConstraintName when using PostgreSQL
- * [HHH-1144] - Implement naming convention for temporary test failures
- * [HHH-1153] - PropertiesHelper fails reading primitive values from hibernate-mapping when doc has whitespace
- * [HHH-1182] - Access to filter metadata
- * [HHH-1183] - Getting sql "plan" for DML operations
- * [HHH-1197] - Support for HQL delete on MaxDB
- * [HHH-1198] - post-insert event pass the entity wo the id field filled when the generator is identity
- * [HHH-1213] - make JACC event listeners auto configurable (through initialize(Configuration))
- * [HHH-1215] - Added support for LVARCHAR in InformixDialect
- * [HHH-1218] - Add concat() function support to SAPDBDialect
- * [HHH-1255] - ThreadLocalSessionContext and Session serialization
-
-** Patch
- * [HHH-967] - executeUpdate on StatelessSession
- * [HHH-1172] - Missing configuration templates for the new MimerSQLDialect
-
-** Deprecation
- * [HHH-1229] - deprecate ability for entities to not define identifier properties
-
-
-Changes in version 3.1 rc3 (17.11.2005)
--------------------------------------------
-
-** Bug
- * [HHH-755] - Setter / Getter for property gDate are wrong
- * [HHH-764] - XML mapping
- * [HHH-1034] - The connection is closed *outside* the JTA transaction in TransactionHelper
- * [HHH-1062] - java:comp/UserTransaction not correct for JBoss
- * [HHH-1064] - Exception using JTATransaction in WebSphere 6
- * [HHH-1069] - Unnecessary commas generated in select with left outer joins
- * [HHH-1075] - New parser "not exists" command bug
- * [HHH-1077] - Typo in docs: "equiped"
- * [HHH-1080] - HQL delete fails on entities with where-fragments using operators other than '='
- * [HHH-1081] - missing parens in example code for Criteria Associations
- * [HHH-1084] - incorrect method name "sql" in Restrictions example, should be "sqlRestriction"
- * [HHH-1091] - Can't write transparent CurrentSessionContext for BMT
- * [HHH-1098] - Patch for build.sh to be able to build latest version on linux
- * [HHH-1106] - HQL "not in" generatad wrong SQL
- * [HHH-1111] - JDBCTransaction.rollback() results in a call to Interceptor.beforeTransactionCompletion()
- * [HHH-1128] - Column alias clashes under certain circumstances
- * [HHH-1146] - latest cvs(11/10/05) hibernate3 issue with classic query
- * [HHH-1156] - StatefulPersistenceContext not serializable when property-ref is used
- * [HHH-1160] - Incorrect use of getGeneratedKey() for Oracle
-
-** New Feature
- * [HHH-449] - korean hibernate reference manual
- * [HHH-1129] - use expected-type in 'untyped' Query.setParameter()
-
-** Improvement
- * [HHH-221] - Proxy for one-to-one with property-ref
- * [HHH-844] - move parameter "bookkeeping" into QueryTranslator
- * [HHH-1051] - "Compiled" native SQL queries are not cached
- * [HHH-1061] - import.sql should allow more human readable and usable files
- * [HHH-1078] - <dynamic-component> requires type on property
- * [HHH-1120] - Make NamingStrategy to work nicely with HA and EJB3 naming strategy
- * [HHH-1142] - added getSelectSequenceNextValString() and getCurrentTimestampSelectString() to TimesTenDialect
-
-** Patch
- * [HHH-1063] - support for 'locate' function in SQLServer and Sybase dialects
- * [HHH-1090] - Allow subqueries on criteria to obtain non-string results
- * [HHH-1095] - Hibernate takes incorrect HasCode when a lot of CompositeKeys and Lazy loading is involved
- * [HHH-1103] - finalize method filter for proxies
- * [HHH-1136] - more meaningful AssertionFailure message in org.hibernate.persister.entity.JoinedSubclassEntityPersister.getTableId(...)
-
-
-Changes in version 3.1 rc2 (17.10.2005)
--------------------------------------------
-** Bug
- * [HHH-1045] - Example contains inner classes that aren't serializable
- * [HHH-1055] - optimistic-lock is not inherited from class to subclass et.al.
-
-** Improvement
- * [HHH-702] - auto detect aliasing for collection properties (coll.key, coll.id etc.)
- * [HHH-1038] - make 'auto' the default for hibernate.connection.release_mode
- * [HHH-1042] - determine "expected type" of parameters during HQL parsing
-
-
-Changes in version 3.1 rc1 (07.10.2005)
--------------------------------------------
-** Bug
- * [HHH-528] - component.manyToOne.id in HQL causes join
- * [HHH-871] - Configuration.setListener(String type, Object listener) throws ClassCastException
- * [HHH-873] - referencing raw HQL FromElement alias outide the from clause of update and delete statements generates incorrect sql
- * [HHH-876] - PreparedStatement being closed before being executed by AbstractBatcher
- * [HHH-884] - SchemaExport does not propagate parent indexes to <union-subclass> tables
- * [HHH-887] - Aggressive release and Session.connection()
- * [HHH-893] - custom tuplizer are not instantiated for components
- * [HHH-905] - $PlaceHolder$ remains in generated SQL when filter is enabled
- * [HHH-907] - optimistic-lock="false" for timestamped object results in SQLException: Invalid column index
- * [HHH-908] - CLONE -NullPointerException when using BigInteger in a query
- * [HHH-911] - CGLIBLazyInitializer and Exceptions
- * [HHH-913] - NPE in CMTTransaction since javax.transaction.Transaction is never set
- * [HHH-918] - impossible to move objects to another session
- * [HHH-924] - Useless OracleErrorCodeConverter (and possibly others)
- * [HHH-932] - HQL UPDATE and <union-subclass>
- * [HHH-946] - QuerySyntaxException might not be serializable
- * [HHH-964] - ORA-00936 with joined subclass / Oracle
- * [HHH-986] - Need to check Thread.currentThread().getContextClassLoader() in ConfigHelper
- * [HHH-991] - Cannot use comparator class
- * [HHH-1000] - varchar(xxx char) not supported on Oracle8i
-
-** New Feature
- * [HHH-950] - interface for SessionFactory.getCurrentSession() handling
-
-
-** Improvement
- * [HHH-608] - update HSQLDialect for HSQL 1.8 sequence support
- * [HHH-889] - Add read-only cache-mode comment in <query and <sql-query
- * [HHH-898] - OracleDialect UTF8 varchar2
- * [HHH-909] - Onquoted primary key in IncrementGenerator
- * [HHH-988] - generated="never|insert|always"
- * [HHH-989] - add discussion of implicit and explcit joins
- * [HHH-1011] - Make disconnect/reconnect of a Session implicit
-
-** Patch
- * [HHH-994] - Sybase/SQLServer support for temporary tables
-
-
-Changes in version 3.1 beta 3 (13.09.2005)
--------------------------------------------
-** Bug
- * [HHH-528] - component.manyToOne.id in HQL causes join
- * [HHH-871] - Configuration.setListener(String type, Object listener) throws ClassCastException
- * [HHH-873] - referencing raw HQL FromElement alias of update and delete statements
- * [HHH-876] - PreparedStatement being closed before being executed by AbstractBatcher
- * [HHH-884] - SchemaExport does not propagate parent indexes to <union-subclass> tables
- * [HHH-887] - Aggressive release and Session.connection()
- * [HHH-893] - custom tuplizer are not instantiated for components
- * [HHH-905] - $PlaceHolder$ remains in generated SQL when filter is enabled
- * [HHH-907] - optimistic-lock="false" for timestamped object results in SQLException: Invalid column index
- * [HHH-908] - NullPointerException when using BigInteger in a query
- * [HHH-911] - CGLIBLazyInitializer and Exceptions
- * [HHH-913] - NPE in CMTTransaction since javax.transaction.Transaction is never set
- * [HHH-918] - impossible to move objects to another session
- * [HHH-924] - Removed ErrorCodeConverters
- * [HHH-946] - QuerySyntaxException might not be serializable
-
-** Improvement
- * [HHH-898] - OracleDialect UTF8 varchar2
- * [HHH-909] - Unquoted primary key in IncrementGenerator
-
-
-Changes in version 3.1 beta 2 (16.08.2005)
--------------------------------------------
-** Bug
- * [HHH-477] - Boolean discriminators generate invalid SQL for PostgreSQL dialect
- * [HHH-480] - SchemaExportTask ignores some properties not defined in hibernate.properties
- * [HHH-615] - SchemaExport outputFile ignores ant's basedir
- * [HHH-770] - hql query execution generates invalid SQL
- * [HHH-779] - Assertion failure occured with Hibernate 3 saving objects
- * [HHH-781] - SimpleExpression ignorecase regression
- * [HHH-799] - merge() and embedded composite identifiers
- * [HHH-801] - subselect fetch and named parameters
- * [HHH-802] - querying "mapped" composite identifiers
- * [HHH-803] - no version increment from delayed collection adds
- * [HHH-805] - Session.getStatistics().getEntityCount() throws UnsupportedOperationException
- * [HHH-819] - Firebird CONCAT SQL function
- * [HHH-821] - query by natural-id cache is not update when object is inserted or deleted
- * [HHH-822] - <key-property> will actually pick up <type> tags if it were allowed by the DTD
- * [HHH-825] - ReadWrite-Cache issues NullPointerException after modification of an array
- * [HHH-839] - Session.refresh not working for custom 'Load' SQL
- * [HHH-849] - Cartesian product + implicit joins
- * [HHH-854] - Class with mapped composite id can't have subclasses
- * [HHH-858] - Autocommit status inconsistent in connections created by DriverManagerConnectionProvider
- * [HHH-863] - Hibernate generates "notExists" instead of "not exists"
- * [HHH-868] - Missing parens after / or -
-
-** New Feature
- * [HHH-35] - add attribute haltonerror to schemaexport Ant task
- * [HHH-182] - Mimer SQL Dialect for Hibernate 3
- * [HHH-704] - Statistics for optimistic lock failures
- * [HHH-725] - Allow hooks into all executed sql by a session
- * [HHH-783] - collection lazy="extra"
- * [HHH-818] - Optimisitc locking using database current timestamp
- * [HHH-828] - session.getTransaction()
- * [HHH-829] - <cache include="all|non-lazy" ... />
- * [HHH-831] - allow database generated property values
- * [HHH-832] - allow database generated property values for versioning
- * [HHH-838] - Transaction.setTimeout()
- * [HHH-840] - allow definition of "auxiliary" database objects in mapping
- * [HHH-846] - Add Intializable interface for events
- * [HHH-848] - Validate mappings against JDBC metadata
- * [HHH-859] - post-commit events
-
-** Improvement
- * [HHH-133] - schemaexport task: provide independent drop/create output
- * [HHH-135] - parameterized types can't be used on key-property or ir (possible others)
- * [HHH-552] - NoopAccessor for HQL-only properties
- * [HHH-680] - Easier support for doing UserCollectionType's
- * [HHH-686] - Final classes and classes with private null ctors cause unhelpful NullPointerException
- * [HHH-754] - Allow HQL DML for implicit polymorphism
- * [HHH-782] - Avoid unnecessary updates when component property is update='false' but modified
- * [HHH-786] - Improve lazy options for <one-to-one>
- * [HHH-791] - Use cascade styles when fetching entities in refresh() and merge()
- * [HHH-815] - Confusing use of the term "dereference"
- * [HHH-830] - Improvements to caching lazy properties
-
-** Patch
- * [HHH-378] - Better LockMode.UPGRADE for DB2 UDB v8.2
- * [HHH-430] - Improved SizeExpression with greater, lesser, not equals, etc. capabilities
- * [HHH-735] - SchemaUpdate reads table metadata from wrong schema
- * [HHH-780] - org.hibernate.proxy.BasicLazyInitializer reflection hotspot
- * [HHH-864] - Use QUERY_CACHE for sessions with filters to improve performance
-
-
-Changes in version 3.1 beta 1 (21.07.2005)
--------------------------------------------
-
-** Bug
- * [HHH-145] - union-subclass and oracle 8i
- * [HHH-374] - EJB3 example delete query doesn't work in Hibernate.
- * [HHH-447] - EHCache integration prevents multiple session factories
- * [HHH-488] - JACCListeners are not working at all
- * [HHH-564] - missing commas for implicit joins
- * [HHH-577] - joins within subqueries on dbs supporting ansi-joins result in extraneous commas
- * [HHH-592] - cast() function doesn't know its returned Hibernate type
- * [HHH-639] - CGLIB instrumentation of subclasses
- * [HHH-658] - Bug in Alias Name Generation
- * [HHH-671] - Firebird support of sequences/generators
- * [HHH-679] - setLockMode(LockMode.UPGRADE_NOWAIT) does not translate to correct SQL on Oracle
- * [HHH-688] - Bad implementation in org.hibernate.type.CustomType.stringToObject
- * [HHH-691] - generated column alias is incorrect if there is a prior relationship and the table column names are similar to the table name
- * [HHH-694] - NPE when accessing the SLCache stats with TreeCache
- * [HHH-698] - Exception on EG , trying to change immutable id (natural-id)
- * [HHH-699] - Incorrect Tablename genetaion when using MySQL Dialect and no Schema definition
- * [HHH-708] - Restrictions.in could not be used properly on composite-ids
- * [HHH-709] - ArrayType.replaceElements fails if original.length != target.length
- * [HHH-718] - HQL "fetch all properties" not working for column level lazy props
- * [HHH-726] - ConstraintViolationException with primitive collection
- * [HHH-727] - java.lang.StackOverflowError when cascade="true" on both sides of bidirectional one-to-one association using FK
- * [HHH-734] - HQL incorrectly parses certain query strings
- * [HHH-736] - Use of sql functions containing space not supported in filter conditions
- * [HHH-738] - formula property with select-before-update
- * [HHH-747] - Order.toSQLString generates incorrect statement
- * [HHH-748] - component dereferencing in subquery from clauses
- * [HHH-752] - Typo in 8.5.3 bidirectional one-to-one jjoin table example
- * [HHH-757] - NullPointerException when using BigInteger in a query
-
-** New Feature
- * [HHH-595] - HQL insert select
- * [HHH-597] - Named XML resultsetmappings
- * [HHH-696] - handle discriminators on HQL insert
- * [HHH-697] - allow bumping versions in HQL update
- * [HHH-716] - handle version columns in bulk inserts
- * [HHH-723] - Need to be able to pass in javax.sql.DataSource in SF creation
- * [HHH-739] - Order.ignoreCase()
- * [HHH-741] - select clause subselects
- * [HHH-742] - Stateless session
- * [HHH-744] - collection fetching in scroll() via "break processing"
- * [HHH-768] - <many-to-many property-ref=".."/>
-
-** Improvement
- * [HHH-14] - Add Session.delete(String entityName, Object entity)
- * [HHH-295] - cleanup and expose the Tuplizers
- * [HHH-352] - HQL bulk and cache
- * [HHH-689] - exclude parens for components outside where-clause
- * [HHH-743] - {coll.key}, {coll.index}, {coll.element}, etc
- * [HHH-745] - EJB3 composite PK style
- * [HHH-749] - Cascade merge() and unidirectional one-to-many
- * [HHH-750] - use attribute name other than 'type' in dynamic-maps
- * [HHH-753] - Replace antlr System.exit with QueryException
- * [HHH-769] - property-ref="foo.bar" to a component property
- * [HHH-772] - null in maps are handled inconsistently
- * [TODO-18] - optimistic-lock="all|dirty" with components
-
-
-Changes in version 3.1 alpha 1 (24.06.2005)
-------------------------------------
-** Bug
- * [HHH-204] - Wrong/uncommon log name in class ...hql ast ErrorCounter
- * [HHH-241] - HQL lexer doesn't support unicode quoted strings
- * [HHH-354] - property named "full" breaks HQL queries
- * [HHH-493] - WARNING: Keyword 'member' is being intepreted as an ident
- * [HHH-538] - length() function does not work in SQLServerDialect
- * [HHH-539] - ClassCastException on mapping a property with a formula in a set of composite elements
- * [HHH-540] - Mapping a one-to-many collection with a non-null foreign key within a component fails on save
- * [HHH-547] - Cannot commit using UserCollectionType and debug logging
- * [HHH-548] - many-to-many faulty delete optimization when filter in use
- * [HHH-554] - Hibernate 3 HQL to SQL FROM Clause Comma Generation Problem
- * [HHH-558] - HQL doesn't support multi-byte character in class name and property names
- * [HHH-559] - quoted multi-byte character in HQL is translated into weird character in SQL.
- * [HHH-565] - delete-orphan generating AssertionFailure
- * [HHH-566] - The result is not correct in 'createQuery("select new Foor(x,x) from Foo").scroll()'
- * [HHH-570] - size operator fails on a many to many in HQL
- * [HHH-571] - JDK 1.3 Compatibility Issue
- * [HHH-573] - error when merging entity graph has cascade level>2
- * [HHH-575] - org.hibernate.cache.FilterKey is not Serializable
- * [HHH-589] - parameterized expression inside function
- * [HHH-594] - order-by mapping for collections overrides order by in HQL
- * [HHH-601] - New temporary table feature assumes all persisters are ready
- * [HHH-614] - SchemaUpdate broken in DB2/400
- * [HHH-622] - Spelling mistake 'intepreted' in org.hibernate.hql.PARSER warning
- * [HHH-642] - criterias with projection
- * [HHH-650] - FilterImpl is Serializable yet FilterDefinition is not
- * [HHH-657] - Date parse exception using EntityMode.DOM4J
- * [HHH-666] - JTAHelper.isInProgress( txn.getStatus()) throws NPE when txn null
-
-** New Feature
- * [HHH-620] - Extra join conditions in HQL
- * [HHH-640] - short-circuit dirty checking for instrumented classes
- * [HHH-643] - support mutable="false" for collections
- * [HHH-645] - Session.setReadOnly()
- * [HHH-549] - portable to_char() function
- * [HHH-576] - Hook to pre-process generated select strings in the Dialect
- * [HHH-662] - Add support for definition of functional composite key ("properties") in joined subclass
-
-** Improvement
- * [HHH-46] - Allow access to properties that are not joined
- * [HHH-261] - Stored procedure support for SQLServer dialects
- * [HHH-351] - multi-table bulk operations
- * [HHH-574] - improve in naming named-query
- * [HHH-596] - Auto-detect {..} in native SQL queries
- * [HHH-641] - create constraints for many-to-one property-ref
- * [HHH-501] - warn when a final method is tried to be proxied
- * [HHH-525] - cglib related startup performance
- * [HHH-557] - Helpful error message for non Serializable classes with a composite-id
- * [HHH-586] - check immutable natural-ids
- * [HHH-609] - Adds substr to PostgreSQL dialect
- * [HHH-618] - documentation bugs
-
-** Patch
- * [HHH-224] - JDataStore Dialect and updated Testfiles
- * [HHH-366] - InformixDialect SQLExceptionConverter
- * [HHH-536] - ImprovedNamingStrategy modifies capitalized column names inappropriately
- * [HHH-632] - Informix Dialect missing from automatic dialect discovery
- * [HHH-4] - CachedFile bugfix + configuration + autodetect resource as file
-
-
-Changes in version 3.0.5 (25.5.2005)
-------------------------------------
-
-** Bug
- * [HHH-516] - Interceptor.onFlushDirty() sometimes not called
- * [HHH-517] - getDatabaseMajorVersion() not available in JDK 1.3
- * [HHH-518] - SQL parser does not recognize all whitespace
- * [HHH-519] - broken SQL when traversing many-to-many to joined <subselect>
- * [HHH-529] - Bug in merge()
-
-** New Feature
- * added <natural-id> mapping
- * [HHH-533] - allow unique-key on <property> and <many-to-one>
- * [HHH-534] - efficient cache by natural key
- * support for <comment> on MySQL
-
-** Improvement
- * [HHH-526] - log "Aggressively releasing JDBC Connection" as DEBUG instead of INFO
- * various logging improvements
-
-
-Changes in version 3.0.4 (23.5.2005)
-------------------------------------
-
-** Bug
- * [HHH-452] - UnsavedValueFactory.instantiate does not wrap the Exception it catches
- * [HHH-456] - Session still holds references to entities after close()
- * [HHH-457] - Log info for structured second-level cache entries is incorrect
- * [HHH-466] - Made default for MS SQL dialect definition more flexible
- * [HHH-473] - Formula can't contain SQL cast keyword
- * [HHH-484] - Order-by not applied to collections fetched by OuterJoinLoader
- * [HHH-487] - Possible empty union in UnionSubclassEntityPersister
- * [HHH-505] - Possible NullPointerException in BigIntegerType
- * [HHH-507] - Cached List does not show additions
- * Fixed bugs in subselect fetching
-
-** New Feature
- * [HHH-455] - Obtain non-intercepted Session by passing an EmptyInterceptor
- * [HHH-467] - HQL: support for case when then else end IN select clause
- * [HHH-485] - Support multiple collection join fetches (attention: Cartesian product) in native SQL queries
- * Added SessionStatistics metric interface
- * Added support for table and column level <comment> blocks
- * Added Simplified Chinese translation of reference documentation (Xiaogang Cao)
-
-** Improvement
- * Any query may now join fetch >1 collection role (attention: Cartesian product)
- * [HHH-454] - Add 2292 integrityViolationCode to Oracle9Dialect
- * [HHH-503] - Implemented ViolatedConstraintNameExtracter for HSQLDialect (Frank Grimes)
-
-
-Changes in version 3.0.3 (8.5.2005)
------------------------------------
-* fixed bug in HQL for composite key classes which have a property named the same as the owning entity's id property
-* replaced 'connection.aggressive_release' with 'hibernate.connection.release_mode'
-* added ConnectionReleaseMode
-* added eager fetch for any associations with fetch=join, even after a HQL query, or cache retrieval (EJB3)
-* added replicate() isUpdate flag to OnReplicateVisitor, useful for native ids
-* fixed ParameterizedTypes order of initialization
-* fixed bug in DB2Dialect
-* fixed EntityMode.DOM4J creation of duplicate <set> output
-* fixed JDBCException error code handling
-* fixed Criteria Restrictions.isEmpty()/isNotEmpty() when collection is mapped to superclass
-* fixed HQL indexed collections access with no alias
-* fixed HQL aggregate functions on components when "id" property is used
-* fixed issue with non-cascading refresh to collections
-* fixed query-timeout not being applied to bulk HQL (Stephan Fudeus)
-* fixed pessimistic locking with Firebird (Yuichi Sugimura)
-* updated Ant 1.6.3
-* improved validation of sql queries, throw QueryException if addEntity() nor addScalar() was called
-* added automatic dialect detection if no dialect is configured
-* added new tutorial (Michael Gloegl, Christian Bauer)
-
-
-Changes in version 3.0.2 (27.4.2005)
-------------------------------------
-* fixed union operations on PostgreSQL
-* fixed HQL concat() function for Oracle dialect
-* fixed auto-close/auto-flush during getCurrentSession() processing
-* fixed ClassCastException with EntityMode.DOM4J
-* fixed HQL dynamic instantiation with iterate()
-* fixed HQL bug with missing parantheses and implicit joins
-* fixed bug were Interceptor.getEntity() wasn't called if in cache
-* fixed bug in merge() of sorted sets
-* fixed bug in EntityMode.DOM4J with non-lazy embedded many-to-ones
-* fixed Criteria/Projection ordering bug
-* fixed HQL referencing component attribute
-* fixed column duplication detection for components
-* fixed eager fetching for many-to-many associations
-* fixed stack overflow with auto_close_session and aggressive_release and unclosed ScrollableResults/HibernateIterator
-* fixed bug in HQL parser regarding naked property refs which reference component properties
-* fixed bug with eager fetched arrays not being loaded
-* fixed bug in filter against joined-subclass
-* improved CacheMode.GET/IGNORE, disabled cache put
-* improved HQL support for standard SQL functions, including coalesce() and nullif()
-* improved filtering of many-to-many associations
-* added HQL support for cast(x as type) if SQL database supports it
-* added increment id generation for union-subclass
-* added ConnectionProvider.supportsAggressiveRelease() for managed environments
-* added support for caching of queries if filter is enabled
-* added PreparedStatement count to Statistics
-* added transactional/nontransactional read()/get() to Cache API
-* added quotation of schema names
-* added Distinct to Projection API
-* added config parameter 'connection.aggressive_release'
-
-Changes in version 3.0.1 (18.4.2005)
-------------------------------------
-* added HQL tuple constructor/comparison feature
-* added HQL "fetch all properties" override if instrumentation is used for lazy loading
-* added HQL projection feature, return Lists instead of arrays for projection
-* added HQL projection feature, return Maps with user-defined HQL SELECT aliases as keys
-* added HQL support for expressions in aggregation functions
-* added new IntegrityViolationException to MySQL dialect
-* added value mapping type 'big_integer'
-* added not-found="ignore|exception" switch for legacy associations (i.e. broken database integrity)
-* added fully automatic Session scoping in JTA environments with sf.getCurrentSession()
-* fixed bug in DTD that wouldn't allow union-subclass in separate file
-* fixed a MS SQL Server case sensitivity issue with native SQL queries
-* fixed a minor bug in subselect fetching
-* fixed case sensitivity in HQL functions
-* fixed a bug with listener assignment for save() operation (Matthew Inger)
-* fixed return-property in named SQL queries to work with all identifier names
-* fixed TransactionManager lookup (again) for WAS 6.0
-* fixed a bug with HQL batch delete and MS SQL Server
-* fixed session not getting closed with auto_close when rollback occured
-* improved concatentation handling in AST parser
-* updated dom4j to avoid memory leak in old version
-* updated C3P0
-
-
-Changes in version 3.0 (31.3.2005)
-----------------------------------
-* added support for autoflush/autoclose to HibernateServiceMBean
-* fixed initialization/session association detection problem of collections
-* fixed creation of FK constraints to union superclass table
-* fixed bug where union-subclass table did not get a PK constraint
-* added a separate log category for HQL parser warnings and errors
-* fixed bulk delete operation on MS SQL Server
-* added support for proxying protected methods (Juozas)
-* added support for unicode quoted strings in new HQL parser
-* fixed implied joins in subselect WHERE clause in new HQL parser
-* added SQLServer7Dialect to handle differences in functions
-* added support for JNDI-bound cache instances, future use for JBoss Cache
-* added scale attribute to column mappings for numeric precision control
-* added fetch=subselect for collections
-* added support for bulk update/delete against discriminator-based inheritence hierarchies
-* added the ability to use naked property refs in HQL (required in update/delete statements)
-* updated CGLIB 2.1.0
-* fixed NPE at BasicEntityPersister.getPropertyIndex (Todd Nine)
-* fixed issue with entity-name and subclasses (Sverker Abrahamsson)
-* fixed issue with correlated subqueries in new HQL parser
-* fixed a problem with native SQL query mapping and embedded composite identifiers
-* improved mapping binding, allowing unordered extends for pure entity-name hiearchies
-* fixed NPE for delete() with deprecated Lifecycle interface
-* fixed a problem with serial joins ending in component value in new HQL parser
-* fixed inner join/subselect precedence problem in new HQL parser
-* fixed indices() function in new HQL parser
-* fixed a bug in InformixDialect, now correct LIMIT clause
-* fixed a bug in idbag.remove() (Sebastien Cesbron)
-* fixed a conflict on OracleDialect between setMaxResult and LockMode.UPGRADE
-* fixed XML configuration file issue with SchemaExport
-* fixed an ArrayIndexOutOfBounds problem
-* renamed executeUpate() to executeUpdate()
-* fixed batch loading for property-ref entities
-* fixed loading from cache of <key property-ref> collection owner
-* fixed minor bug in SQL exception reporting
-* fixed dynamic-component cannot be bound to XML
-* fixed querying component with formula property
-* fixed incorrect table alias for order-by on many-to-many
-* fixed a bug for unidirectional one-to-many with moving child objects
-* fixed a bug with union-subclasses and persister creation
-* fixed a HQL concatenation problem on MySQL
-* fixed a bug where an unnecessary exception was thrown for a property-ref to a superclass property
-* fixed minor dtd bug
-* fixed new bug in Clob/Blob support
-* fixed issue with INDEX_OP and subclass joins on theta-join dialects
-* fixed some minor issues in query cache regions, including HB-1449
-* fixed superflous import and regression bug in verifyparameters
-* fixed two bugs in select id generator (Malcolm Green)
-* fixed increment generator for union-subclass mappings
-* updated JBoss Cache to 1.2.1alpha, fixing locking issues
-* made stat classes serializable
-* fixed merge(), now ignores blob and clob fields
-* added support/dialect for TimesTen
-* improved algorithm for batch fetching, more aggressive
-* improved toStrings()s for Statistics objects (Ryan Lynch)
-* renamed <result-*> to <return-*> for externalized SQL query mapping
-* renamed Session.openSession() for EntityMode to Session.getSession()
-* added support for CASE in HQL
-* fixed bug with filters and polymorphic queries
-* fixed import ordering problem of super/subclass mappings
-* switched to patched ANTLR 2.7.5, now using context classloader before doing class.forname
-* TableHiloGenerator now falls back to TableGenerator properly with max_lo < 2 (Emmanuel Bernard)
-* better transaction handling of TableGenerator in a JTA environment (Emmanuel Bernard)
-* removed hard coded log4j dependency (Emmanuel Bernard)
-* added support for stored procedure in named queries (Max Andersen)
-* added <property-result> to named SQL queries to allow users to use sql without {}-markup
-* added multi-column property support to native SQL mapping
-
-Changes in version 3.0rc1 (28.2.2005)
-----------------------------------
-* introduced EntityModes, and XML mapping preview
-* several minor dialect improvements
-* fixed a problem where filters were not applied to subclasses
-* fixed a problem where InstrumentTask would fail if applied to already-instrumented classes
-* fixed many problems with new parser and made it the default (thanks again to Joshua for the new parser)
-* implemented bulk update/delete queries for the new parser
-* fixed a minor bug in the classic query parser
-* renamed create() to persist() as per EJB3edr2
-
-Changes in version 3.0 beta 4 (11.2.2005)
------------------------------------------
-* support unidirection one-to-many with a not-null foreign key
-* support formulas for index and element of collections
-* support one-to-ones mapped to formulas
-* fixed a bug in proxying methods that return "this"
-* optimized proxies for embededded composite id classes
-* fixed a bug affecting <key-many-to-one>
-* fixed a bug caching newly inserted objects
-* introduced DetachedCriteria
-* support subselects in Criteria queries
-* miscellaneous Criteria API enhancements
-* fixed a problem where hibernate.max_fetch_depth applied to eager fetching via setFetchMode()
-* use inner joins for join fetching not-null fk associations
-* support unique="true" in <component> and <properties> mappings
-* union-subclass hierarchies may own collections (dtd bug)
-* added guid support for Oracle
-* new mechanism for auto-detecting unsaved-value
-* pass state array in delete events
-* improved implementation of hibernate.auto_close_session and hibernate.close_before_completion
-* fixed a bug where components with only collections would be incorrectly nullified
-* fixed a bug where criteria queries with projection could not be cached
-* fixed a problem where duplicate column name aliases could be generated
-
-Changes in version 3.0 beta 3 (30.1.2005)
-------------------------------------------
-* Major rework of Criteria queries, support for projection, grouping, aggregation, ordering by any attribute
-* various improvements to new HQL parser (Joshua Davis)
-* fixed a bug where <join fetch="select"> was broken for subclasses with duplicated property names
-* fixed problems with long types in Oracle DDL generation
-* added EnhancedUserType, UserCollectionType, UserVersionType
-* added CacheMode
-* fixed minor performance problem where cascade delete could add objects to second-level cache
-* added hibernate.default_batch_fetch_size
-* added hibernate.cache.use_structured_entries
-* different classes and collection roles may now share a cache region
-* don't include discriminators for abstract classes in generated SQL
-* it is no longer truly necessary for composite identifier classes to implement equals()/hashCode() (but still recommended)
-* workaround for bug in MySQL InnoDB with self-referential foreign keys
-* added lazy="true" to many-to-one and one-to-one mappings (requires bytecode instrumentation)
-
-Changes in version 3.0 beta 2 (24.1.2005)
-------------------------------------------
-* added LockAcquisitionErrorCodes to MySQL dialect (Jesse Barnum, Emmanuel Bernard)
-* added MultipleHiLoPerTableGenerator, one hi value per row/per table (compliant with EJB3)
-* added a generator handling multiple hi values per table (Emmanuel Bernard)
-* added events for pre/post SQL operation interception
-* added experimental support for JACC-aware configuration and events
-* added full support for implicit polymorphism in Criteria queries
-* added support annotated classes through XML configuration (Emmanuel Bernard)
-* added support for WebSphere's weird TxManagerLookup
-* added support for filters with dynamic-class mappings
-* added support for lists of parameters in filters
-* added support for scalar queries in createSQLQuery (Michael Gloegl)
-* added support for scalar results in native SQL queries (Michael Gloegl)
-* fixed SchemaExport/SchemaUpdate, now respect default_schema and default_catalog (Michael Gloegl)
-* fixed a bug in one-to-one mapping with property-ref
-* fixed a bug in the query cache lookup routine
-* fixed compilation problems on IBM JDK 1.4. and JDK 1.3.1
-* fixed custom SQL for loading when using composite identifiers
-* fixed exception thrown from optimistic locking failures
-* fixed support for limit queries (select first ?) in Informix
-* improved SchemaExport/Update, now respect default_schema and default_catalog
-* improved dialect handling, throw an exception if no dialect has been set
-* improved loading of mappings, no ordering of super/subclasses required anymore
-* improved statistics for second-level cache
-* improved table generators for hi/lo, can now be used in a JTA environment (Emmanuel Bernard)
-* query engine: added support for 'trim([leading | trailing | both] [expression from] expression)'
-* query engine: added support for DISTINCT and ALL
-* query engine: added support for FETCH
-* query engine: added support for HAVING count()
-* query engine: added support for HQL NOT IN and EJBQL '[NOT] MEMBER OF'
-* query engine: added support for ORDER BY COUNT(*)
-* query engine: added support for collections of scalar values
-* query engine: added support for literals in constructor select expressions.
-* query engine: added support for select elements(..) from Foo f
-* query engine: added support for template functions in the SELECT clause
-* query engine: fixed NOT LIKE
-* query engine: introduced EMPTY and added it to constant (support for IS [NOT] EMPTY)
-* updated dom4j, OSCache, EHCache, JBoss Cache, Xerces, Xalan, and Log4j
-* associated class where filter now applies to <one-to-one property-ref>
-
-Changes in version 3.0 beta 1 (21.12.2004)
-------------------------------------------
-* reimplemented HQL using an ANTLR-based AST parser (Joshua Davis)
-* added class="select" id generator
-* added Query.setReadOnly()
-* added hibernate.order_updates
-* introduced cascade refresh
-* added typed JDBC exceptions (Steve Ebersole)
-* improved lifecycle for CacheProviders (Steve Ebersole)
-* added Expression.isEmpty()
-* fixed some minor mapping DTD bugs (Ben Sommerville)
-* fixed auto-commit mode for SchemaUpdate
-* added default-lazy to <hibernate-mapping>, which defaults to true!
-* added fetch="join|select" and deprecated outer-join attribute
-* fixed a bug where <custom-insert> was not used for entities with "identity" id generation
-* fixed some problems with dynamic-class
-* added property-level optimistic-lock attribute, to allow an unchecked property
-* cascade lock() now cascades with LockMode.NONE
-* fixed some bugs in filter handling (Steve Ebersole)
-* added hibernate.transaction.flush_before_completion and hibernate.transaction.auto_flush_session
-* added JSR-220 compliant create() and merge() operations
-* cascade attribute is now multi-valued, with values save-update,create,merge,delete,delete-orphan,lock,evict,replicate,all-delete-orphan
-* index and unique-key attributes may now be multi-valued
-* introduced unsaved-value="undefined", the default for "assigned" ids and <composite-id>, which forces Hibernate to hit the db
-* primitive typed <id> property mappings now default to unsaved-value="0"
-* added ScrollMode
-* added dialect for Derby (Simon Johnston)
-* added MySQLMyISAMDialect and MySQLInnoDBDialect
-* added precision and scale mapping attributes, for numeric types in DDL
-* fixed a problem with duplicate column mappings on Sybase
-* read-write cache now uses version numbers to ensure consistency with database, if available
-* native SQL queries may now fetch a collection role (Steve Ebersole)
-* added sequential-select, optional and inverse attributes to <join/>
-* added <properties> element, which can be the target of a property-ref
-* fixed a bug relating to composite property-refs
-* Hibernate now much more robust if user does not implement equals()/hashCode() on id and unique key classes
-* enabled batch deletes for versioned data
-* fixed a minor bug in Session.close()
-* removed uuid.string and renamed uuid.hex to plain uuid
-* workaround for a MySQL bug in SchemaUpdate
-* added JDBCException.getSQL() and made various improvements to exception flow
-* createSQLQuery() now fully supports components
-* fixed a bug in SQL generation for <joined-subclass> mappings
-* fixed a bug where filter and query parameters could be bound in the wrong order (Steve Ebersole)
-* fixed a problem where quantifiers could not appear in SQL fragments
-* fixed a bug with dynamic components
-* fixed a bug where Dialect default properties overrode user-specified properties (Ben Sommerville)
-* fixed a bug where duplicate column name in a joined table caused an exception
-* implemented two-phase load for dynamic components
-* fixed a bug where cancelQuery() canceled a re-pooled statement
-* deleted collections are now removed from session-level cache
-* fixed a bug in LocaleType (Steve Ebersole)
-* use "with rr" to obtain UPGRADE locks in DB2
-* package attribute now significant for extends
-* fixed a minor problem with Hibernate Clobs and Blobs
-* extends attribute does no longer require specific ordering of mapping files
-
-Changes in version 3.0 alpha (23.8.2004)
-----------------------------------------
-* package rename net.sf.hibernate -> org.hibernate
-* checked exceptions are now runtime exceptions
-* some session methods deprecated and moved to org.hibernate.classic.Session
-* removed various deprecated functionality
-* added Filter API and mappings, for temporal, regional and permissioned data (Steve Ebersole, Gavin King)
-* support cascade delete via ON DELETE CASCADE constraint
-* added extra attributes to named query definition
-* added hibernate.use_identifier_rollback
-* added subselect mappings
-* added lazy="true" to property mappings
-* added <join/> for multitable mappings
-* added <union-subclass/> for table-per-concrete-class strategy
-* added Statistics API and JMX MBean (Gavin King, Emmanuel Bernard)
-* introduced new event-driven design (Steve Ebersole)
-* support for faster startup with Configuration.addCachableFile() (Joris Verschoor, Max Andersen)
-* mask connection password for log level greater of equals to info (Joris Verschoor, Emmanuel Bernard)
-* add check of named queries when building SessionFactory (Joris Verschoor, Emmanuel Bernard)
-* added custom EntityResolver setting capability (Emmanuel Ligne, Emmanuel Bernard)
-* PropertyValueException for null values in not-null properties of components (Emmanuel Bernard)
-* enhanced support for single- and no-argument sql-functions in HQL select clause (Michael Gloegl)
-* Added catalog element, to enable table names like catalog.schema.table (Michael Gloegl)
-* Added <sql-insert>, <sql-update> and <sql-delete> support (Max Andersen)
-* Support callable statements (stored procedures/functions) via callable="true" on custom sql (Max Andersen)
-* Added support for type parameters and typedefs (Michael Gloegl)
-* Added support for JDBC escape sequences in createSQLQuery (Max Andersen)
-* Added statistics per SessionFactory (Gavin King, Emmanuel Bernard)
-* Added a StatisticsService MBean for JMX publucation (Emmanuel Bernard)
-* support for updates via rownum in Oracle
-* fixed problems with SchemaUpdate
-* support for <column formula="..."/>
-* added hibernate.use_sql_comments
-* added property-ref to collection <key/>
-* fixed performance problems with <one-to-one property-ref=.../>
-* enhanced UserType with new methods assemble()/disassemble()
-* better algorithm for batch fetch batch sizes
-* added <dynamic-class>
-* added entity-name concept, and session methods save(entityName, object), update(entityName, object), etc
-* added framework in proxy package
-* native SQL queries may now fetch a collection role
-* added <loader/> for class and collection mappings
-* added getEntity() and getEntityName() to Interceptor
-* formula-based discriminators and association mappings
-* added "guid" id generation strategy
-* various improvements to dialects
-* <discriminator force="true"/> now acts as a filter on collections
-* where filters now apply in the on clause in an outer join
-* added hibernate.jdbc.factory_class to select a custom batcher
-* session now uses entity name + id to enforce uniqueness, instead of table name + id
-
-Changes in version 2.1.6 (9.8.2004)
-------------------------------------
-* fixed Quickstart/readme.txt instructions
-* fixed DB2/400 identity column support
-* fixed the scroll() query method
-* fixed exotic classloader problems with CGLIB
-* added insert="false" for discriminator columns which are part of a composite identifier
-* added several new configuration settings to JMX HibernateService
-* added new instantiate() method to SessionFactory.getClassMetadata()
-* improved the HSQL DB dialect with features from new version
-* added hibernate.jdbc.batch_versioned_data (Steve Ebersole)
-
-Changes in version 2.1.4 (2.6.2004)
-------------------------------------
-* improved Session serialization support by adding ability to serialize unflushed sessions (Steve Ebersole)
-* fixed Session.clear() functionality to clear the internal nonExists cache (Steve Ebersole)
-* much better implementation of scroll() (Steve Ebersole)
-* support "select new ..." for iterate() and scroll() (Steve Ebersole)
-* added support for multi-parameter SQL functions (Steve Ebersole)
-* fixed hbm2ddl generating infinite indexes on MySQL (Michael Gloegl)
-* fixed alias precedence in HQL queries, function names are second (Steve Ebersole)
-* added "transactional" as allowed cache concurrency strategy in XML configuration file
-* improved System.getProperties() with security exception warning in secure environments
-* improved Proxool integration, better property handling
-* fixed problem with use of getDefinedMethod() in secure environments (Ken Arnold)
-* fixed bug in createSQLQuery() which prohibited multiple aliases for the same entity (Max Andersen)
-* fixed query cache misses when using named bind parameters (Michael Greer)
-* recognize "left" and "right as keywords in SQL fragments
-* recognize SQL quoted identifiers in SQL fragments
-* improved identity handling on SQL Server by using scope_identity() for update counts (Arthur Fitt)
-* added DB2390Dialect for DB2/390 databases (Kristoffer Dyrkorn)
-* fixed a bug in toArray() of identifier bag collections (Khachchou Mohammed)
-* fixed a problem with DDL generation for serial columns in Informix
-* fixed a problem with DDL generation for timestamp columns in Informix (Michael Schmidt)
-* fixed a NPE that occurred calling saveOrUpdateCopy() for components
-* fixed a bug with replicate() and uninitialized collections
-* fixed a bug caching one-to-one associations
-* fixed eviction from named query cache regions
-
-Changes in version 2.1.3 (25.4.2004)
------------------------------------
-* added SELECT-clause SQL function support to main Dialects
-* fixed a problem where some unnecessary selects where issued for optional one-to-one associations
-* fixed a bug in SQL generation for criteria queries with multiple one-to-many joins
-* deprecated everything related to PersistentEnum
-* fixed an NPE that occurred when using <one-to-one property-ref> with composite ids
-* fixed a problem with JCA adaptor on WebLogic (Michael Gloegl)
-* improved behavior when removing elements from <idbag>s
-* fixed a bug in getGeneratedKeys() support (Michael Gloegl, Kevin Day)
-* fixed a bug when using Criteria queries with collections of joined-subclasses
-* fixed an NPE that occurred when calling comparator() on a lazy sorted set (Attila Szegedi)
-* fixed a bug when using setMaxResults() with native SQL queries in some Dialects
-* validate that composite id classes override hashCode() (Adrien)
-* fixed some minor problems with saveOrUpdateCopy()
-* fixed some problems in OSCache provider
-* fixed an NPE that occurred when calling a lazy collection after evicting from session
-* fixed an NPE that occurred when select-before-update is used with unversioned data (Patrick Peralta)
-* fixed a bug where dynamic-components could not be queried (Massimo Ferrari)
-* SQL formula parser now recognizes all Dialect-specific SQL functions (Anthony Patricio)
-* fixed a problem where SQL CASE statements could not appear in SQL formulas
-* fixed a problem where subselects with joins could not appear in SQL formulas
-* C3P0 and Proxool pools now cleaned up after SessionFactory.close()
-* fixed a bug where dirty checking of mutable properties was broken after lock()
-* fixed a minor bug where orphan delete was broken for newly saved instances
-* added Query.setFetchSize() and Criteria.setFetchSize()
-* PreparedStatement pooling in DBCPConnectionProvider can now be disabled (Emmanuel Bernard)
-* Query.setProperties(Object) now detects array and collection valued properties and delegates to Query.setParameterList() (Max Andersen, Nick Heudecker)
-* lengths of positional parameters and types arrays are now validated
-* fixed an obscure problem where a PreparedStatement was not closed
-
-Changes in version 2.1.2 (4.2.2004)
------------------------------------
-* added Session.isDirty()
-* fixed a very obscure concurrency problem with read-write cache for inverse collections
-* deprecated Criteria.returnMaps() / Criteria.returnRootEntities() in favor of new ResultTransformer framework
-* don't cache objects with dynamic-update="true" or <joined-subclass> mappings immediately after insert/update
-* added version checking to saveOrUpdateCopy()
-* fixed constraint violations that occurred when mixing identity columns with other id generation strategies
-* added Sybase 11.9.2 dialect to support older versions of Sybase that do not support ANSI joins (Colm O' Flaherty)
-* added Informix9Dialect (Finn McCann and Max Andersen)
-* added DB2400Dialect (Peter DeGregorio)
-* fixed a problem where mapping validation failure was reported as duplicate import (Michael Gloegl)
-* fixed a problem with Expression.not() in MySQL (Michael Gloegl)
-* added support for ResultSet.getGeneratedKeys() (David Morris, John Kristian)
-* added check attribute to allow check constraints in DDL
-* implicit polymorphism for Criteria queries (Shorn Tolley)
-* use IF EXISTS for dropping hilo tables (Michael Gloegl)
-* better exception report if deleted object is resaved by cascade
-* support nested components in Example queries (Emmanuel Bernard)
-* fixed a minor problem with onDelete() callbacks
-* fixed an obscure problem with select-before-update
-* added SunONETransactionManagerLookup (Robert Davidson)
-* fixed a problem with replicate() and <joined-subclass> mappings
-* made setParameterList() accept empty lists and deny null values (Max Andersen)
-* validation check on query parameters now allows setParameter(x, null) (Max Andersen)
-* added default-access to DTD (Max Andersen)
-* made Query.setParameterList() accept empty lists and deny null values (Max Andersen)
-* allow Query.setParameter(x, null) (Max Andersen)
-* queries with "select new" now cacheable
-* throw meaningful exception when lazy initialization occurs on disconnected session
-* added default-access to <hibernate-mapping> (Max Andersen)
-* added -text support to SchemaUpdate (Max Andersen, Matt Hall)
-* fixed broken implementation of embedded composite keys with createSQLQuery() (Max Andersen)
-* added hibernate.cache.use_minimal_puts config property to reduce unnecessary second-level cache puts
-* optimized performance of orphan delete detection (Bertrand Renuart)
-* fixed problem where unnecessary UPDATE occurred after INSERT for versioned objects with collections
-* WebSphereTransactionManagerLookup for WAS 5.1 (Edina Pimp)
-* Criteria queries now cacheable (Mario Ivankovits)
-* fixed problem with ordered, paginated queries in DB2 (Tim Collins)
-* fixed a bug caching <idbag>s
-* lazy="true" collections are now lazy even when available in cache
-* fixed a problem with version unsaved-value="negative"
-* added hibernate.cache.region_prefix config property (William Drai)
-* fixed problem where configuration input streams were not closed (Rajesh Patel)
-
-Changes in version 2.1.1 (17.12.2003)
--------------------------------------
-* added optional package attribute to <hibernate-mapping>
-* added <meta-value> element to allow simpler <any> mapping
-* native SQL queries are now cacheable - added <synchronize> element to allow correct result set expiry
-* fixed a bug in CGLIB2 integration (Chris Nockleberg)
-* added NamingStrategy
-* don't cache objects with formula properties immediately after insert/update
-* log generated SQL to a special category
-* type of property with access="field" may now be guessed using reflection
-
-Changes in version 2.1 final (12.12.2003)
------------------------------------------
-* fixed a problem with CGLIB2 proxies and method calls inside constructors
-* fixed a bug running SchemaExportTask with mappings in jar files (Tom McCune)
-* allow custom persister declaration for subclasses (Nick Johnson)
-* fixed handling of sequences in SchemaUpdate on Oracle (Andrew Delpha)
-* fixed a bug where Iterator did not handle single null values correctly
-* detect and throw exception in the case of a duplicate property mapping
-* don't auto-create indexes for collection foreign keys (roll back to 2.0.x)
-
-Changes in version 2.1 rc1 (29.11.2003)
----------------------------------------
-* long identifier and discriminator column names are now safely aliased (Max Andersen)
-* cleaned up mapping package to allow applications to manipulate metamodel programmatically
-* fixed a recent bug where collection sort order was lost in second-level cache
-* formula attribute now supported for joined-subclass mappings
-* formula properties may now be used anywhere in queries
-* dialect-specific query pagination for SQL Server
-* fixed a bug where a long path expression ending in collection access by index missed some tables in SQL FROM clause
-* fixed a very ancient performance problem where null one-to-one associations caused n+1 selects
-* added Session.saveOrUpdateCopy()
-* fixed some bugs in Example queries
-* fixed some minor bugs in dialect-specific query pagination
-* immutable entity passed to update() is now lock()ed instead
-* reworked the semantics of nonstrict-read-write
-* JCS cache support now deprecated
-* fixed some obscure bugs in collection handling
-* migrated to CGLIB2 (thanks to Chris Nockleberg)
-* fixed bugs in replicate()
-* fixed a bug affecting joined-subclass mappings with dynamic-update=true
-* performance improvements to boolean type mappings (Bertrand Renuart)
-* integrated JBoss TreeCache clustered cache (thanks to Bela Ban and Ben Wang)
-* fixed a bug in new query parameter validation (Steve Ebersole)
-* fixed a bug where <any> mappings caused unnecessary ObjectDeletedException at flush time
-* fixed a bug where associations with property-ref mappings were not properly cached
-* throw PropertyValueException when not-null properties are null at flush time
-* added unsaved-value attribute to version property mapping (Emmanuel Bernard)
-* tolerate classnames containing $ (Steve Ebersole)
-
-Changes in version 2.1 beta 6 (5.11.2003)
------------------------------------------
-* added Session.cancelQuery()
-* improvements to transaction handling for failed commit (thanks to Juergen Hoeller)
-* added cascade="delete-orphan"
-* fixed an exception that occurred when a property was declared not-null="true" update="false" (thanks to John Kristian)
-* support multiple named query cache regions (Mikheil Kapanadze)
-* some improvements to collection reattachment
-* fixed a bad bug with adds to an uninitialized bag or list
-* removed support for <dynabean/> components
-* added <dynamic-component/> mapping for properties of type Map
-* fixed a bug where schema export generated index names that were too long for DB2
-* allow per-region expiry policies in OSCache (Matthias Bogaert)
-* fixed a stack overflow that could occur while initializing nonlazy collections
-* fixed a bug in case-insensitive like for Example queries
-* fixed a bug in ScrollableResults.setRowNumber() (Martin Priekopa)
-* improvements to the cache concurrency strategies
-
-Changes in version 2.1 beta 5 (30.10.2003)
-------------------------------------------
-* Support for custom CollectionPersister (Nick Johnson, Max Andersen)
-* Support for named SQL queries (Max Andersen)
-* duplicate named queries now throws MappingException instead of just logging warning (Max Andersen)
-* fixed problems with WebSphereTransactionManagerLookup (Ralf Taugerbeck, Daniel Bradby)
-* added support for custom collection persisters (thanks to Max Anderson, Nick Johnson)
-* fixed a performance problem during query compilation (Bulent Erdemir)
-* composite keys now supported in createSQLQuery() (Max Andersen)
-* fixed JCA adaptor to run in WebLogic (Daniel Bradby)
-* integrated SwarmCache (Jason Carreira)
-* integrated OSCache (Matthias Bogaert)
-* fixed an NPE that could occur with lists and orphan delete
-* allow nullable one-to-one with property-ref
-* improved usage of Dialect-specific limit SQL
-* fixed problem where non-lazy collections held by cached objects were not immediately initialized
-* fixed getReturnTypes() for native SQL queries (Max Andersen)
-* fixed problems with Criterions that applied to multi-column properties
-* check of rowcounts when JDBC batch updates enabled
-* added named SQL queries using <sql-query> element (Max Andersen)
-* added some extra validations so Hibernate fails earlier when user makes mistakes
-* allow lazy="true" as an alternative to proxy="ClassName"
-* removed dependency to commons-lang
-* SchemaExport now creates indexes for collection foreign key columns if specified by Dialect
-* fixed a bug parsing named parameters in setParameterList()
-* select new Foo(...) will now tolerate null values if the constructor accepts a wrapper type
-* fixed a problem detecting Proxool
-* added logging of persistent object states during flush()
-* allow "not null" as a discriminator value
-* added "parameters" config param to "sequence" generator (Matthias Bogaert)
-
-Changes in version 2.1 beta 4 (3.10.2003)
------------------------------------------
-* fixed a bug where <any> mappings did not handle proxies correctly
-* implemented new optimistic-lock strategies
-* fixed several bugs in Criteria query API
-* fixed a bug caching property-ref associations
-* improvements to XML Databinder (Ara Abrahamian)
-* added Session.replicate() and ReplicationMode
-* added ScrollableResults.setRowNumber() / ScrollableResults.getRowNumber()
-* added query cache and Query.setCacheable()
-* added Criteria.returnMaps()
-* fixed some problems with CGLIB proxies
-* fixed an NPE that occurred when a joined-subclass of a versioned entity defined only collections
-* added the access attribute, direct field access and the PropertyAccessor extension point
-* added MatchMode for use with Criteria queries (thanks to Michael Gloegl)
-* fixed a bug where some lazy="false" collections were not immediately initialized
-* fixed problem with WebSphere 5 TransactionManager
-* support schema attribute in MySQL, by using an underscore in the table name (Chris Hane)
-* now seperate Dialects for Interbase and Firebird (Reha Cenani, Max Andersen)
-* removed built-in PreparedStatement cache
-* added Session.getSessionFactory()
-* fixed problem with native SQL queries and Query.setProperties() (Max Andersen)
-* Query now fully validates parameters against the query string before passing them to JDBC (Max Andersen)
-* fixed an NPE in SessionFactory.close()
-* fixed an NPE that occurred when using <idbag>s
-* added SQL-level query results paging to DB2Dialect
-* "foreign" id generator now handles detached instances
-
-Changes in version 2.1 beta 3 (7.9.2003)
-----------------------------------------
-* added Example queries
-* fixed an exception that occurred at startup with <key-many-to-one> and <joined-subclass>
-* fixed a bug where composite-elements were not being updated if a property not in the equals() was changed
-* <parent> property of a composite-element may now be used in equals()
-* named parameters may now be used in HQL order by clause
-* null value of version property now indicates unsaved instance
-* added select-before-update attribute
-* two-phase loading now use for components
-* better implementation of equals()/hashCode() for proxies
-* added property-ref attribute to <many-to-one>
-* renamed result() to uniqueResult()
-* added Session.get()
-* added HashtableCacheProvider
-* JTA TransactionManager now used even when not using Hibernate Transaction API
-* always bypass process-level cache for LockMode.READ
-
-Changes in version 2.1 beta 2 (27.8.2003)
------------------------------------------
-* <subclass> and <joined-subclass> may now appear outside of a <class> element, by providing the extends attribute (Max Andersen)
-* fixed an NPE at startup that was introduced in beta 1
-* fixed a bug in Map.putAll()
-* new pluggable cache API
-- deprecated <jcs-cache> in favor of <cache>
-- net.sf.hibernate.cache.CacheProvider settable via hibernate.cache.provider_class
-* more aggressive caching
-* added Hibernate.close(Iterator)
-* Criteria queries may now include joins
-- Criteria.addJoin()
-- Criteria.createCriteria()
-* hibernate.transaction.manager_lookup_class should now ALWAYS be specified in JTA environment when using jcs caching
-* fixed a bug caching <key-many-to-one>
-* fixed bug where cached component did not get <parent> property populated
-* added hibernate.max_fetch_depth property
-* smarter outer-join fetching
-* transient object may now be associated with session using Session.lock()
-* added Query.result(), Criteria.result()
-
-Changes in version 2.1 beta 1 (10.8.2003)
------------------------------------------
-* batch-size attribute for collection and class mappings, to allow batch loading
-* collections of "value types" (including composite-elements) may now appear in HQL from clause
-* more efficient loading of collections, and better handling of non-lazy collections
-* added HQL index() function to allow access to collection element index
-* added Session.createSQLQuery() (Max Andersen)
-* added outer-join attribute to collection mappings
-* Criteria.setFetchMode() now applies to collection-valued path expressions
-* added property-ref attribute to <one-to-one>, enabling unique foreign key associations
-* added hibernate.max_fetch_depth config property
-* added hibernate.hbm2ddl.auto config property
-* fixed a bug with combination of <jcs-cache> and <key-many-to-one>
-* support for Dialect-specific SQL functions in HQL select clause (David Channon)
-* added Session.clear()
-
-Changes in version 2.0.2 (2.8.2003)
------------------------------------
-* subqueries may now use HAVING and GROUP BY clauses
-* fixed a bug with setMaxResults(), setFirstResult() in HSQL (introduced in 2.0.1)
-* fixed a bug in Set.removeAll()
-* fixed a bug in SchemaUpdate (Mathias Bogaert)
-* added weak typing functionality to ScrollableResults
-* fixed a bug with "calendar" versioning in IBM JDK1.3.1 (workaround for JDK bug)
-* fixed a bug in mapping DTD that caused a problem for hbm2java (Max Andersen)
-* fixed a bug querying nested components
-* SQL generation now prefers ANSI-style inner joins to theta inner joins
-* fixed a bug caching collection references loaded using FETCH
-* fixed a bug with composite foreign keys in normalized table mappings (Tom Sedge)
-* limit support for Interbase (Ludovic Orban)
-* added where attribute to <class> mappings
-* added cascade="all-delete-orphan" for collection mappings
-* fixed a bug binding named parameters with setMaxResults()/setFirstResults()
-* fixed some minor bugs in HQL translator
-* fixed a long-standing bug where a <key-many-to-one> could not be dereferenced in HQL
-* SQL UPDATEs now occur in a predictable order (same order as objects were loaded)
-* support for SELECT ... FOR UPDATE in SAPDB
-* fixed bug where Criteria queries against a subclass also returned superclass instances
-* fixed a very rare bug where an update could get lost with normalized mappings
-* fixed a problem with proxied class heirarchies rooted at an interface or abstract class
-* where and order-by attributes now allow SQL function calls and subselects
-* added formula attribute to <property> tag, to allow "computed" properties
-* fixed a bug where PreparedStatements were sometimes not closed when an exception occured
-* workaround for a problem with <joined-subclass> and Interceptor.onFlushDirty()
-
-Changes in version 2.0.1 (17.6.2003)
-------------------------------------
-* fixed some problems with new dialect-specific LIMIT clauses
-* improved parsing of collection where attribute
-* made one-to-many bags more efficient (they are really sets!)
-* allowed type="calendar" for <version> properties
-* fixed a bug with locking a versioned composite-id class
-* refresh() may now take a transient instance
-* added ProxoolConnectionProvider (Martin Crawford)
-* fixed some minor JCA issues (Mike Mosiewicz)
-* fixed a bug with FETCH and sorted associations
-* improved performance of SchemaUpdate tool (Teodor Danciu)
-* fixed a bug in Configuration.addFile(String) (Ken Geis)
-* tidied up and documented hbm2ddl package (esp. Ant tasks)
-* deprecated CounterGenerator in favor of IncrementGenerator
-* improved logging during initialization
-* deprecated "vm" in favor of "increment" id generator
-
-Changes in version 2.0 final (8.6.2003)
----------------------------------------
-* added "fetch" keyword to HQL
-* added evict() methods to SessionFactory for JVM-level cache
-* destroy caches from SessionFactory.close()
-* fixed an NPE in Session.evict() (Simon Spero)
-* added Query.setLockMode()
-* tidied up implementation of Loader
-* release ResultSets more aggressively
-* miscellaneous improvements to some Dialects
-* hbm2java now honors the sort attribute (Max Andersen)
-* added exceptions to Interceptor interface
-* fixed problem with setMaxResults(), setFirstResult() in Oracle (introduced in beta 6)
-* fixed some SQL generation that was a problem for Sybase (Dietmar Posselt)
-* fixed some problems with ODMG API (Oliver Gries)
-* added JOTMTransactionManagerLookup (Low Heng Sin)
-* added JOnASTransactionManagerLookup (?)
-* fixed a bug in WeblogicTransactionManagerLookup (Mathias Bogaert)
-* added Criteria.setFetchMode()
-* added new Expressions
-* much more elegant/robust handling of quoted identifiers
-* renamed Hibernate.association() to Hibernate.entity()
-* added dynamic-update and dynamic-insert mapping attributes
-* fixed a bug with refresh() of objects with collections
-* HQL aliases now optional - "from Cat" now legal
-* platform-independant quoting of identifiers using backticks
-
-Changes in version 2.0 beta 6 (10.5.2003)
------------------------------------------
-* fixed a bug querying one-to-many associations to a <joined-subclass>
-* added support for dialect-specific LIMIT-style clauses (David White)
-* added <idbag>
-* fixed bug in hashCode() of persistent collections
-* <joined-subclass> now supported in HSQL (Wolfgang Jung)
-* fixed problem for XML parsers which ignore default values declared in DTD
-* <meta> tags can now be set to not be inheritable
-* fixed bug in Expression.in()
-* fixed an NPE that could occur from update() in very strange cases (Chris Nockleberg)
-* disabled outer-join back to owner when initializing one-to-many (performance improvement)
-* fixed a bug in Query.setParameterList() (Nick Heudecker)
-* improved JCA support (Igor Fedorenko)
-
-Changes in version 2.0 beta 5 (21.4.2003)
------------------------------------------
-* Informix support (Steve Molitor)
-* fixed a bug parsing "select new ... " queries
-* deprecated "object" type in favor of <any> mappings
-* added Session.contains()
-* added extra DBCP config options (Alex Burgel)
-* SessionFactory.close() now unbinds from JNDI
-* added Session.evict()
-* got rid of an unnecessary SQL DELETE issued when an empty collection was dereferenced
-* where attribute of collection mappings no longer ignored for deletion
-* improved logging
-* support polymorphic associations to "embedded" composite id classes
-* various bugfixes to collection filter parameter binding
-* fixed some problems with proxies introduced in earlier beta versions
-* fixed bug with self-reference in the case of identity column id generation
-* added hibernate.cglib.use_reflection_optimizer property
-* added nonstrict-read-write cache
-* fixed an SQL-generation bug in new Criteria API
-* added CompositeUserType
-* sequence and table id generators now aware of default-schema
-* added update and insert attributes to <component> element
-* fixed a bug with expressions like elements(foo.bar.baz) in where clause
-* more efficient Set initialization (two-phase load)
-* removed support for hibernate.query.imports and added <import> mapping element
-* fixed problem in DBCP connection validation and added new config properties
-* hbm2java can now generate finder methods for persistent objects (experimental) (Matt Hall)
-* hbm2java small fixes/refactorings to support generating more than one file per persistent object (Max Andersen)
-
-Changes in version 2.0 beta 4 (22.3.2003)
------------------------------------------
-* Major HQL improvements
-- from "Foo as foo join foo.bars as bar" instead of "from foo in class Foo, bar in elements(foo.bars)"
-- "select new Foo(bar.name, bar.amount) from ...."
-- outer and full join support
-* Query methods now return this, to allow chaining
-* FrontBase support (Run Lussier)
-* experimental JCA support (Daniel Bradby)
-* hbm2java now can generate Beans style property events (Klaus Zimmermann)
-* support SQL identifiers quoted with []
-* fixed bug with PostgreSQL
-* name attribute now optional in .cfg.xml
-* support for postgres ilike operator (M Lang)
-* squash warnings with GNU JAXP (Chris Nockleberg)
-* fixed a bug in Query.setParameterList()
-* Ingres support (Ian Booth)
-* collections now detect changes not made via wrapper for newly saved objects
-* new (experimental) Criteria + Expression APIs
-* Query.setEntity(), etc, now aware of proxies (also improved hueristics for guessing Type)
-* added Hibernate.isInitialized()
-* detect changes made directly to newly-wrapped collection (ie. not via the wrapper)
-* added Hibernate.refresh(Object, LockMode)
-* update(), saveOrUpdate() no longer initialize a proxy
-* fixed problems with Sybase
-* added force attribute to <discriminator>
-* improved handling of null discriminator-value
-* support SQL-style '' escape for HQL strings
-
-Changes in version 2.0 beta 3 (24.2.2003)
-----------------------------------------
-* collections now represent null elements as a missing row
-* collections now deserialize correctly (fix for bug in beta 2)
-* standardised on dom4j for XML parsing
-* fixed bugs in collection caching (an exception occurred for some sorted collections and some kinds of maps)
-* allowed null discriminators
-* set autocommit to true in SchemaUpdate
-* fixed a stack overflow that could occur in toString() of classes created with hbm2java (Max Andersen)
-* fixed a bug where composite-element <parent> property was not being set after retrieval from cache
-* added where attribute to collection mappings to allow filtering
-* fixed a exception that occurred when wrapping collections with sort="MyComparator" (Jason Horne)
-* objects with mutable="false" are now never updated
-* fixed an exception that occurs with <key-many-to-one> association to a class with a composite id (Stefano Travelli)
-* added SchemaExport Ant task (Rong C Ou)
-* integrated latest CGLIB release (Juozas Baliuka)
-- added support for new CGLIB reflection optimizer (Juozas Baliuka)
-* improved query cache algorithm (Who?)
-* fixed a bug in "object" type
-* Lists and arrays now represent null elements as a missing row
-* fixed a bug in Hibernate PreparedStatement cache where maxRows and fetchSize were not cleared before re-caching
-* fixed a bug in HibernateService that caused a restart to fail
-* added SybaseAnywhereDialect (?)
-* added SessionFactory.close()
-
-Changes in version 2.0 beta 2 (2.2.2003)
-----------------------------------------
-* property column names may now be of any length (Mark Woon)
-* fixed problem where CodeGenerator created private get/set pairs (Max Andersen)
-* fixed all silly bugs in Configuration.configure()
-* efficient collection updates from Session.update()
-* added <jcs-class-cache> and <jcs-collection-cache> elements to hibernate-configuration.dtd
-* support for normalized mappings for databases with DECODE instead of CASE (Simon Harris)
-* added Oracle9Dialect
-* added JRun4TransactionManagerLookup (Joseph Bissen)
-* fixed JDBCException to keep reference to underlying SQLException
-* fixed a bug loading many-to-many associations with a repeated column name
-* fixed a bug in ShortType
-* added IngresDialect (Ian Booth)
-* added --config option to SchemaExport
-
-Changed in version 2.0 beta 1 (28.1.2003)
------------------------------------------
-* renamed packages to net.sf.hibernate.*
-* all API methods now wrap SQLExceptions
-* removed support for toplevel collections / subcollections
-* created hibernate-mapping-2.0.dtd
-- renamed 'readonly' attribute to 'inverse'
-- renamed 'role' attribute to 'name'
-- changed default value for 'unsaved-value' to "null"
-- added mandatory 'name' attribute to <param>
-- added <meta> tag
-* created hibernate-configuration-2.0.dtd
-* brand new Configuration API, including exposed mapping package
-* completely reworked IdentifierGenerator framework
-- built-in generators now auto-detect the type (so integer identity columns are supported, for example)
-- parameters are now named
-- built-in strategies are renamed
-* expanded Interceptor interface
-* removed exceptions that occur if an object is saved or deleted multiple times in a session
-* added <parent> subelement to <composite-element> and <nested-composite-element>
-* collections except for <bag>s now implement by-value equals() and hashCode()
-* removed all deprecated methods
-* added Session.refresh()
-* added dynamic-update functionality
-* added update and insert attributes to <property> and <many-to-one> mappings
-* added elements(), indices(), size(), maxelement(), minelement(), maxindex(), minindex() collection functions to query language
-* huge improvements to CodeGenerator (Max Andersen)
-* enhanced outerjoin fetching support in queries
-* experimental support for DynaBeans as components
-
-Changes in version 1.2.3 (28.1.2003)
-------------------------------------
-* fixed a recently-introduced problem with Timestamp dirty checking
-* added createClob(), createBlob() for streams (Benoit Menendez)
-* SchemaUpdate now configures Dialect correctly (Michael Locher)
-* update() now working for classes with embedded composite ids
-* unsaved-value attribute now recognized for <composite-id>
-* fixed a minor problem where a very specific kind of SQL select did not qualify a column name
-* added Query.getQueryString()
-* fixed an NPE that sometimes occurred when hibernate.connection.username was not specified
-* fixed a bug in SchemaExport where foreign key constraints did not use qualified tablenames
-* added isFirst(), isLast() to ScrollableResults
-* fixed bug finding properties inherited by mapped interfaces
-
-Changes in version 1.2.1b (4.1.2003)
-------------------------------------
-* fixed an NPE that occurred while loading Hibernate classes in IBM JVM
-* arbitrary JNDI InitialContext properties may now be passed as hibernate.jndi.*
-* fixed a problem where index column was not being nullified when an entity was removed from a one-to-many
-
-Changes in version 1.2.1 (31.12.2002)
--------------------------------------
-* Changed the MySQL mapping of Hibernate "timestamp" to MySQL "DATETIME" (Matthias Schwinn)
-* TransactionManagerLookup classes now define defaut UserTransaction JNDI names
-* support for WebSphere 5 (Venkat Srinivasan)
-* fixed a bug with query expressions of the form "foo.bar.id" for normalized mappings
-* experimental Blob/Clob support (thanks to Benoit Menendez and Mark Woon)
-* improvements to SchemaUpdater (Benoit Menendez)
-* deprecated suspendFlushes() / resumeFlushes() in favor of FlushMode
-* deprecated IDGenerationException in favor of IdentifierGenerationException
-* fixed a bug introduced in 1.2 final where cascade save-update was sometimes ignored for readonly="true" bags
-* fixed a bug caching null-valued one-to-one associations
-* CodeGenerator now supports <bag> and <joined-subclass>
-* fixed problem with TimestampType on DB2 (Jonas)
-* fixed a bug in generated SQL for collections with <joined-subclass> mappings (Robson Miranda)
-* fixed a bug caching Maps (Benoit Menendez)
-* SchemaExport now accepts a .jar file as a source of mappings
-* hibernate.dbcp.validationQuery setting (Juozas Baliuka)
-* hibernate.c3p0.validate setting
-* added Query.setTimeout()
-* setMaxResults() now behaves sensibly on SAPDB (Russel Smyth)
-* added Query.setProperties() and Query.getNamedParameters(), fixed a bug in Query.getReturnTypes()
-* CodeGenerator now generates equals() and hashCode() for composite-id classes (and toString() for all classes)
-* CodeGenerator now includes superclass properties in subclass constructors (Max Andersen)
-* added Hibernate.custom()
-
-Changes in version 1.2 final (7.12.2002)
-----------------------------------------
-* fixed a bug where uppercase IS NOT NULL, NOT IN, etc were not parsed correctly
-* addition to readonly="true" bags now no longer requires collection initialization
-* added ResinTransactionManagerLookup (Aapo Laakkonen)
-* improved exception message when setting null to primitive type (Max Andersen)
-* improved exception message for an unserializable identifier
-* support for overloaded setter methods (patch by Alex Staubo)
-* CodeGenerator support for <composite-element> (patch by Wolfgang Jung)
-
-Changes in version 1.2 beta 4 (29.11.2002)
-------------------------------------------
-* fixed bugs in one-to-many associations to a <joined-subclass>
-* LockMode class now properly serializable
-* exceptions thrown by proxied objects are now propagated correctly (rather than being wrapped)
-* made Calendar types compilable in JDK1.2
-* added --format and --delimiter options to SchemaExport (thanks to Richard Mixon)
-* fix for problem with class with no properties + native id generation + MS SQL Server contributed by Max Andersen
-* fixed a BAD bug in Hibernate.configure() (thanks to Rob Stokes)
-* CodeGenerator now recognizes <key-many-to-one> (patch by Wolfgang Jung)
-* CodeGenerator now recognizes <version> and <timestamp> (patch by Max Andersen)
-
-Changes in version 1.2 beta 3 (26.11.2002)
-------------------------------------------
-* fixed bug in UPDATE SQL generation for <joined-subclass> mapping strategy (fix by Robson Miranda)
-* support <composite-id> correctly in CodeGenerator (patch by Tom Cellucci)
-* fixed an exception that occurred with short qualified tablenames
-* added the polymorphism attribute to the <class> element
-* allow "not between", "not in" in query language
-* allow subqueries beginning with a from clause in query language
-* query expressions like "not (foo.bar.baz=1)" now translated to "(bar.baz!=1 and foo.bar=bar.id)"
-* support for PostgreSQL ~ operator (regular expression match)
-* load(id, lockMode) now working for normalized table mappings
-* now compiling properly under JDK1.2, 1.3 (fix by Tom Cellucci)
-* support for subcollections in query language: foo.bars[2]['index'], foo.bars[4].elements, foo.bars[0].size, etc.
-* added calendar and calendar_date types
-* find() queries may now return scalar values
-* component-type properties may appear in a select clause
-* ConnectionProviders now set isolation level before toggle autocommit
-* Iterator.next() now throws NoSuchElementException as per Iterator contract (fix by Alex Staubo)
-* database reverse engineering GUI tool contributed by Tom Cellucci
-* SchemaExport now generates column in mapping file order (rather than alphabetical order)
-* <joined-subclass> mappings working on Oracle (?)
-
-Changes in version 1.2 beta 2 (15.11.2002)
-------------------------------------------
-* support multi-argument SQL functions in queries
-* reintroduced deprecated form of update() with slightly altered semantics
-* fixed BAD problem in the generated SQL for certain queries
-* added OrionTransactionManagerLookup
-
-Changes in version 1.2 beta 1 (11.11.2002)
-------------------------------------------
-* Fixed a bad bug binding to JNDI with servers that use serialization in preference to getReference()
-* support for quoted SQL identifiers (patch by Jean-Francois Nadeau)
-* Hibernate.initialize() allows the user to force initialization of a proxy or persistent collection
-* fix to minor bug in CodeGenerator by Max Andersen
-* fixed a problem with outerjoin fetching of one-to-one associations defined on subclasses
-* fixed a minor problem with proxies of classes that override finalize()
-* finished work on normalized table mappings using <joined-subclass> declaration (only for databases with ANSI OUTER JOIN and CASE)
-* deprecated hibernate-mapping.dtd in favor of hibernate-mapping-1.1.dtd
-* reworked unmapped class / interface / table-per-concrete-class query functionality, fixing several problems
-* removed deprecated methods
-* deprecated findIdentifiers()
-* fixed some problems with embedded composite identifiers
-* fixed a bug cascading deletes to one-to-one associations
-* CodeGenerator now generates isFoo() style getters for boolean properties (patch by Aapo Laakkonen)
-* components may now have a nonpublic constructor (patch by Jon Lipsky)
-* changes / bugfixes to MapGenerator tool
-* experimental SchemaUpdate tool contributed by Christoph Sturm
-
-Changes in version 1.1.8 (30.10.2002)
--------------------------------------
-* full support for composite keys in query language
-* fixed bug where character type could not be null
-* fixed bug parsing collection filters like: "group by this.date"
-* fixed a bad bug where C3P0 properties were not always being used
-* replaced hibernate.use_jdbc_batch with hibernate.jdbc.batch_size
-* renamed some other properties to hibernate.jdbc.*
-* made hibernate.show_sql settable from JMX (patch by Matas Veitas)
-* added SessionFactory.getAllClassMetadata(), getAllCollectionMetadata (patch by Max Andersen)
-* allowed use of concrete-class proxies with inherited classes ie. <subclass name="ConcreteClass" proxy="ConcreteClass">
-* HibernateException extends Apache commons lang NestableException (patch by Max Andersen)
-* <parent> subelement of <component> allows a component to get a reference back to owning entity
-* Query.setParameterList() to bind lists of values to "in (:list)"
-* Java constants may now be used in Queries
-* serialization of an object graph now removes all initialized proxies
-* several other improvements to proxy handling
-* proxies may now be used in JDK 1.2
-
-Changes in version 1.1.7 (25.10.2002)
--------------------------------------
-* added Session.createFilter()
-* fixed a bug parsing queries with properties of form idXXX (introduced in 1.1.6)
-* fixed a bug parsing queries with the id property named in the select clause (introduced in 1.1.6)
-* fixed a bug dirty checking big_decimal (fix by Andrea Aime)
-
-Changes in version 1.1.6 (24.10.2002)
--------------------------------------
-* classes without subclasses may now declare themselves as their own proxy
-* outer-join attribute now working for component properties and <many-to-many>
-* outer-join="true" will now force outerjoin loading for an association even if associated class has a proxy
-* enabled oracle-style outerjoins for SAP DB
-* version properties may now be long or short (previously always integer)
-* discriminators may now be boolean type
-* fixed the foo.bar.id.baz syntax for queries doing composite-key joins
-* fixed an NPE that occurred when no Dialect was specified
-* CodeGenerator now fully proxy-aware (patch by Max Andersen)
-* removed dependency upon trove4j
-
-Changes in version 1.1.5b (20.10.2002)
---------------------------------------
-* fixed an NPE that occurred on JMX startup
-* smarter fetching for one-to-one associations
-
-Changes in version 1.1.5 (19.10.2002)
--------------------------------------
-* added built-in currency and timezone types
-* hibernate-mapping-1.1.dtd
-- added <index-many-to-many> and <composite-index> subelements of <map>
-- added <key-property> and <key-many-to-one>
-- renamed "save/update" to "save-update"
-- tightened up the dtd (now using enumerated attribute types)
-* enabled multi-column map indexes (ie. key of a Map)
-* composited-id may now include a many-to-one association
-* improvements to Databinder contributed by Brad Clow
-* fixed bugs in minIndex, maxIndex, minElement, maxElement
-* fixed a problem with JTATransaction in a JBoss BMT bean
-* added addMapResource() to the MBean
-* minor improvements to Configuration
-* more accurate cache entry timestamping to increase the likelihood of cache hits
-* JCS cache may now be used with JTATransaction in WebSphere, Weblogic, JBoss (thanks to Matt Baird)
-* improvements to CodeGenerator contributed by Andrea Aime
-* stopped a TransientObjectException that was being thrown when it shouldn't be
-* re-enabled primary key export for tables of sets with not-null elements
-* hibernate.statement.fetch_size configuration contributed by Matas Veitas
-* added Interceptor application callback interface
-* added metadata package to expose persistence metadata to the application
-* changed filter() argument type from Collection to Object to allow filtering of arrays and Maps
-* added <column> index attribute to allow table indexes to be specified in mapping document
-* implemented support for queries against interfaces and abstract superclasses
-
-Changes in version 1.1.4b (4.10.2002)
--------------------------------------
-* fixed problems for JDK1.2 (thanks to Chris Webb)
-
-Changes in version 1.1.4 (4.10.2002)
-------------------------------------
-* New locking API
-* disabled 2-phase load for objects contained in Sets (because they should be initialized before equals() or hashCode() is called)
-* fixed a bug where non-serializable cache entries could not be cached by JCS auxiliary cache
-* fixed a bug in dirty checking PersistentEnums
-* deprecated getID() in favor of getIdentifier() (for mainly cosmetic reasons)
-* HibernateService may now be subclassed to obtain mapping files by some other mechanism (patch by Chris Winters)
-
-Changes in version 1.1.3 (1.10.2002)
-------------------------------------
-* new 2-phase loading process (replaces complicated "deferred" loading process)
-* new ScrollableResults interface for efficiently navigating Query results
-* removed deprecated interfaces
-* created engine package to hold "internal" APIs (ie. the external contract of the impl package)
-* fixed bug where a component defined before all collections in the mapping file caused collections to not be persisted (thanks to Michael Link)
-* fixed a bug where cascaded saveOrUpdate was ignoring the unsaved-value setting
-* faster Timestamp dirty checking
-
-Changes in version 1.1.2 (29.9.2002)
-------------------------------------
-* added persister attibute of class mapping to support custom persistence strategies
-* Support for Oracle outerjoins contributed by Jon Lipsky
-* Reworked versioning, fixing bugs (and tightening tests)
-* Fixed a bug where an ObjectNotFoundException was thrown for null one-to-one associations
-* fixed problems with timestamps introduced in 1.1.1
-* added batch file for running demo
-
-Changes in version 1.1.1 (27.9.2002)
-------------------------------------
-* Major refactoring / abstraction of persistence logic
-* added maxIndex, minIndex, maxElement, minElement properties for collections
-* added support for class names in where clause of queries
-* fixed a bug where an association could become null after caching
-* fixed a bug where an NPE could occur for a null component
-* fixed minor bugs in SortedMap, SortedSet
-* object type is now cacheable
-* added big_integer type
-* improved dirty checking for timestamp type
-
-Changes in version 1.1.0 (22.9.2002)
-------------------------------------
-* implemented collection indexing with [] in query language
-* fixed some minor query-language bugs
-
-Changes in version 1.1 beta 14 (19.9.2002)
-------------------------------------------
-* bags now implement java.util.List
-* delete() may now take a transient object
-* bug where sorted collections were not being sorted fixed by Brad Clow
-* fixed a bug in many-to-many association filtering
-* no longer try to query connection metadata when using user-supplied connections
-* added hibernate.use_scrollable_resultsets for user-supplied connections
-* fixed a problem where sublists were not being proxied
-* fixed a problem where Hibernate could not call methods of package-visibility classes
-* removed obsolete select attribute from MapGenerator
-* multiple occurrences of same path in a query no longer require multiple joins
-* added WrongClassException
-
-Changes in version 1.1 beta 13 (15.9.2002)
-------------------------------------------
-* added constants to Lifecycle interface
-* fix for circular cascade="save/update"
-* fixed a bug in cascaded update introduced in version 1.1 beta 11
-* added object type
-
-Changes in version 1.1 beta 12 (14.9.2002)
-------------------------------------------
-* Session.filter() for applying a filter query to collections
-* experimental ODMG API (OQL features are not yet compliant)
-* new DBCPConnectionProvider for Apache commons-dbcp connection pool
-* Session.lock() now does version number check even on databases with no FOR UPDATE clause
-* introduced new cascade styles: cascade="save/update", cascade="delete"
-* added default-cascade attribute
-* foreign key columns lengths now automatically set to primary key column lengths for SchemaExport
-* added error checking of row update counts when batching disabled
-* major improvements to ProxyGenerator tool
-* CodeGenerator now aware of proxy attribute
-* integrated PointbaseDialect contributed by Ed Mackenzie
-* fix for problem where Proxies were being initialized on identifier access by Christoph Sturm
-
-Changes in version 1.1 beta 11 (7.9.2002)
------------------------------------------
-* deprecated update() in favor of saveOrUpdate() and introduced unsaved-value attribute of <id>
-* children mapped with cascade="all" are now always saved/updated even without a call to update(parent)
-* support for composite-id classes where the composite id consists of properties of the persistent class
-* added constrained attribute to <one-to-one> element
-* added Validatable interface
-* renamed several config properties (Hibernate issues log warnings for obsolete property usage)
-* arbitrary JDBC connection properties may now be passed using hibernate.connection.*
-* fixed a classloading bug in C3P0ConnectionProvider (introduced in 1.1 beta 10)
-* CodeGenerator may now take multiple mapping files on the commandline
-
-Changes in version 1.1 beta 10 (28.8.2002)
-------------------------------------------
-* fixed a bug that occurred when calling Session.update() for an object with no properties
-* changed class loading to use the context classloader first
-* introduced <timestamp> as an alternative to <version>
-* added Query.getReturnTypes()
-* fixed a bug with composite-elements introduced in 1.1 beta 7
-* save() may now be used to persist classes with composite-ids
-* improved handling of nanoseconds values in Timestamps
-* support for composite id properties + objects in select clause of iterate()
-* beefed-up collection tests
-
-Changes in version 1.1 beta 9 (26.8.2002)
------------------------------------------
-* fixed a bug introduced in 1.1 beta 8 that could cause an NPE after deserializing a session with proxies
-* deprecated insert() in favor of more flexible save()
-* deprecated IDGenerator in favor of new IdentifierGenerator interface
-* "assigned" id generator now returns the existing value of the id property instead of throwing an Exception
-* fixed a problem where PreparedStatements were not being recached after retrieving a natively generated id
-
-Changes in version 1.1 beta 8 (25.8.2002)
------------------------------------------
-* fixed a bug introduced in 1.1 beta 6 where an updated element of an indexed one-to-many collection caused an SQLException
-* uninitialized collections passed to update() may now be initialized in the new Session
-* uninitialized proxies passed to update() may now be initialized in the new Session
-
-Changes in version 1.1 beta 7 (23.8.2002)
------------------------------------------
-* fixed a bug where Hibernate was not returning statements to the cache when batch updates were disabled
-* fixed a bad bug parsing mappings with toplevel one-to-many associations
-* fixed a bug with versioning and subcollections
-* reworked Set updates again for much improved efficiency
-* schema export now creates primary keys for indexed collection tables
-* minor refactor to Type hierarchy
-* improved some user-error detection
-* fixed foreign key constraint creation for MySQL with Innodb tables
-
-Changes in version 1.1 beta 6b (20.8.2002)
-------------------------------------------
-* Fixed a problem updating Sets
-* added <bag> mapping for java.util.Collection
-
-Changes in version 1.1 beta 6 (20.8.2002)
------------------------------------------
-* completely reworked fetching code
-- one-to-many associations now always fetched in a single select
-- many-to-many associations fetched in a single select when outerjoin fetching is enabled
-- this includes nested outerjoin fetching of the associated class!
-- outerjoin fetching for <many-to-one> nested inside <component> or <composite-element>
-- code refactored to be cleaner and faster
-* removed unnecessary order by clause in List and array fetching SQL
-* collections now individually update, insert and delete only rows that changed (thanks to Doug Currie)
-* fixed a problem where exceptions were being wrapped in a LazyInitializationException for non-lazy collections
-* added order-by attribute to <set> and <map> to specify a table column as defining the iteration order (JDK1.4 only)
-* improved error detection in Session.update()
-* further usage of JDBC2 batch updates
-* some fine-tuning of JDBC2 feature usage configuration
-* CodeGenerator will now generate components and arrays
-* fixed problem where CodeGenerator could not generate classes in the default package
-* improved logging of flush() activity
-* renamed property hibernate.use_jdbc2 to hibernate.use_jdbc_batch
-
-Changes in version 1.1 beta 5 (13.8.2002)
------------------------------------------
-* hibernate.query.imports property to allow use of unqualified classnames in queries
-* fixed a bug in collection flushing that was introduced in 1.1 beta 4
-
-Changes in version 1.1 beta 4 (11.8.2002)
------------------------------------------
-* JMX integration (thanks to John Urberg)
-* "having" clause in query language
-
-Changes in version 1.1 beta 3 (10.8.2002)
------------------------------------------
-* removed the select="all" attribute for <class> mappings - "select distinct" now specified in the hibernate query
-* system properties now override hibernate.properties
-* Session now flushes changes even less often (only when actual updates to the queried table(s) are waiting)
-* fixed a *very* rare problem where an unnecessary update could be accidently issued before a delete
-
-Changes in version 1.1 beta 2 (6.8.2002)
-----------------------------------------
-* fixed a bug exporting schemas with identity columns
-* implemented factory-level caching of collections
-* Datastore.storeJar() contributed by Christian Meunier
-* added <mapping jar="jarfile"> to hibernate.cfg.xml
-
-Changes in version 1.1 beta 1 (4.8.2002)
-----------------------------------------
-* new Query API including named parameters, pageable results
-* subqueries in Hibernate queries (only for databases that support subselects)
-* new DocBook documentation (contributed by Christian Bauer)
-* support collections .elements, .indices inside select clause (even in aggregate functions)
-* don't load collections before removal unless absolutely necessary
-* mutable="false" attribute in <class> element to map immutable classes
-* use JDBC batch to insert collection elements if hibernate.use_jdbc2 is set
-* brand new PreparedStatementCache
-* improvements to MYSQL dialect for long datatypes
-* always check isAccessible() before setAccessible(true)
-* removed extra unnecessary table join in queries with one-to-many association
-* removed ugly "WHERE 1=1" from generated SQL
-* fixed exception mapping a class with no properties (fix by Rob Stokes)
-* logging enhancements including SQLException logging
-* reworked factory-level cache and integrated JCS support (thanks to Christian Meunier)
-* fixed a bug with circular references in cached data
-* removed blocking cache support
-* now rendering outerjoins as "LEFT OUTER JOIN" because "LEFT JOIN" caused problems for some Sybase versions
-* added default Hibernate properties to Dialects
-* native id generation now falls back to sequence id generation when identity columns not supported by the dialect
-* fixed some problems with native id generation under HSQL
-* may now use Session.insert() even when using native id generation
-
-Changes in version 1.0.1b (18.7.2002)
--------------------------------------
-* fixed a bad bug in query parser when hibernate.query.substitutions was unset
-* much improved build.xml Ant script
-* latest c3p0.jar
-
-Changes in version 1.0.1 (17.7.2002)
-------------------------------------
-* enabled use of scalar values and aggregate SQL functions in select clause of iterate() queries
-* fixed bug in JNDI lookup for SessionFactory
-* changed ordering of SQL inserts/deletes for child collections of a cascade-enabled association
-- better behaviour for some not-null constraints
-- performance optimization for bidirectional many-to-one associations
-* added hibernate.query.substitutions property to allow named query constants (eg. translate 'true' to '1')
-* added locale type for java.util.Locale
-* added sequence hi/lo generator (seqhilo.long)
-* fixed bug where load(), onLoad() callbacks were sometimes called at wrong time
-* fixed an exception (fix by Eric Everman) and improved identifier searching in MapGenerator tool
-* refactored SerializableType
-* extra logging + error handling
-* documentation enhancements
-
-Changes in version 0.9.17 (3.7.2002)
-------------------------------------
-* Added UserType interface
-* documented Lifecycle
-* added some new trace messages to log
-* bugfix to allow SQL functions like upper(), lower(), etc to work on all platforms
-* documented SAP DB support (dialect contributed by Brad Clow)
-* foreign key constraint export for SAP DB
-* map index may be the composite-id of the element class (contributed by Jon Lipsky)
-* fixes to CodeGenerator tool (contributed by Uros Jurglic)
-
-Changes in version 0.9.16 (19.6.2002)
-------------------------------------
-* fixed bug cacheing objects with references to themselves
-* support for composite ids of classes with no id property
-* may now disable outer join (deep) fetching for an association by setting outer-join="false"
-* enabled outer join fetching for one-to-one
-* fixed a bug for mappings that specify class attribute of <one-to-many>
-* fixed a bug where Hashbelt did not expire cached data in a timely fashion
-* fixed a mistake in the mapping DTD
-* new user-error check in update()
-
-Changes in version 0.9.15 (15.6.2002)
-------------------------------------
-* one-to-one associations
-* support for "tricky" mappings in SchemaExport tool (multiple properties to one column, etc)
-* Transaction API contributed by Anton van Straaten
-* SessionFactory may be bound to JNDI name by setting hibernate.session_factory_name
-* Sessions are now Serializable!
-* added Session.findIdentifiers() query methods
-* new Lifecycle interface to replace deprecated PersistentLifecycle
-* fixed problem where session did not autoflush on iterate() queries
-* performance enhancements to collection dirty checking
-* added Hibernate.configure() and configuration file format
-* removed some deprecated methods
-* refactored Type hierarchy
-* query language identifiers now case sensitive (bugfix for case sensitive SQL dialects)
-* username/password now optional for datasource (contributed by Emmanuel Bourg)
-* much improved API documentation
-* binary types now saved using streams if hibernate.use_streams_for_binary=true (contributed by Jon Lipsky)
-* MySQL Strings now mapped to TEXT columns if length > 255 (contributed by Christoph Beck)
-
-Changes in version 0.9.14 (4.6.2002)
--------------------------------------
-* lifecycle objects - properties now have a cascade attribute to cascade save, update, delete
-* composite id properties may now be used in queries eg. foo.id.bar (contributed by Jon Lipsky)
-* slightly changed semantics of update() so it now also save()s new transient instances
-* Session now flushes() itself less often before query execution (performance enhancement)
-* fixed problem where Session.save() returned null instead of the natively generated id
-* fixed bug with object identity for cached classes
-* fixed bug where delete(x) could not be called after update(x)
-* MUCH improved Exception hierarchy
-* deprecated create()
-* added sql-type attribute to <column> tag to allow user to override default type mapping
-* deeper fetching with use_outer_join
-* new ConnectionProvider framework
-* fixed a bug where blocking cache could return stale data
-* now working again in JDK1.2.2
-* fixed problem with not-null associations + native key generation
-* minor changes to PersistentLifecycle interface
-* initial, minimal version of new Transaction mechanism
-* MUCH improved documentation
-
-Changes in version 0.9.13 (25.5.2002)
--------------------------------------
-* Datastore.storeResource() to load mapping files from classpath
-* fixed a problem executing under JDK1.3 when compiled from JDK1.4
-* documentation improvements
-
-Changes in version 0.9.12 (24.5.2002)
-------------------------------------
-* Session.update() methods to update a persistent instance from transient copy (as requested by many users)
-* discriminator column name, type, length, etc now configurable by <discriminator> tag in mapping file
-* discriminator column values configurable by discriminator-value attribute of <class> and <subclass> tags
-* added Session.insert(object, id) for classes with no identifier property
-* fixed another bad bug with connection handling (fix by Anton van Straaten)
-* fixed a problem with deferred loading
-* fixed a problem with sorted collections (fix by Anton van Straaten)
-* nested collections of objects now require 2 SQL SELECTs to load, rather than size+1
-* session is NO LONGER atomic - application should discard session when exception occurs
-* fixed problem where character type was mapped to VARCHAR column
-* arrays of proxies now possible by using new element-class attribute of <array> tag
-* fixed various problems with proxies
-* added proxy generation tool
-* proxy unit tests
-* replaced two RuntimeExceptions with checked exceptions
-* made hibernate.username/hibernate.password optional for DriverManager
-* CodeGenerator now supports all hibernate basic types
-* much improved caching algorithm for compiled queries
-* may now specify properties simply by placing hibernate.properties in classpath
-* documentation improvements + fixes
-* --abstract switch to MapGenerator (contributed by Eric Everman)
-
-Changes in version 0.9.11 (12.5.2002)
-------------------------------------
-* fixed major bug with connection handling (fix by Anton van Straaten)
-
-Changes in version 0.9.10 (11.5.2002)
-------------------------------------
-* set a default schema name using SessionFactory property hibernate.default_schema
-* code generator tool contributed by Brad Clow (www.workingmouse.com)
-* lazy object initialization under JDK 1.3 and above
-* fixed some error messages to go to logging framework, not stdout
-* new system property hibernate.show_sql=true logs all executed SQL to stdout
-* integration of bugfixes in c3p0
-* wrap IllegalArgumentExceptions in HibernateExceptions
-* added ObjectNotFoundException and StaleObjectStateException
-* fixed a bug when using schemas
-* new caching strategy (and documented cache feature)
-
-Changes in version 0.9.9 (25.4.2002)
------------------------------------
-* sorted sets and maps (thanks to Doug Currie)
-* mapping files may now be loaded using getResourceAsStream() (thanks to Markus Meissner)
-* hibernate messages now logged by Apache commons-logging
-* default hi/lo generator table now has column named "next_id", instead of "next"
-* query language may now refer to identifier property name (eg. foo.fooKey as alternative to foo.id)
-* hibernate.jndi_class, hibernate.jndi_url now optional when using datasource
-* hibernate now throws an exception if you try to persist an object with a reference to a transient object
-* improved connection pooling algorithm (hibernate.pool_size limits pooled conections)
-* very experimental integration of c3p0 JDBC connection pool (http://sourceforge.net/projects/c3p0)
-* now compiles under JDK 1.2.2
-* fixed bug persisting null components
-* fixed bug where cached prepared statements were not cleaned up after disconnect() session
-* fixed a null pointer exception in MappingByReflection
-
-Changes in version 0.9.8 (13.3.2002)
------------------------------------
-* supports database native key generation in Sybase, MS SQL, MySQL, DB2, Hypersonic (contributed by Christoph Sturm)
-* supports Mckoi (dialect contributed by Doug Currie)
-* supports Progress (dialect contributed by Phillip Baird)
-* added exceptions to catch Session reentrancy from PersistentLifecycle.load() + store()
-* experimental cross-transaction cache
-* Session.lock() and Session.loadWithLock() for pessimistic locking
-* HiLoGenerators may now use their own DriverManager connection properties + may now use same table across diff mapping files
-* Session.flush(), Session.close() and Session.connection() replace Session.commit(), Session.cancel()
-* Session.disconnect() and Session.reconnect() for long transactions
-* added single JVM id generators vm.long, vm.hex
-* added unique column constraints to mappings
-* extensions to IDGenerator framework
-* support sequence-style ID generation in Oracle, PostgreSQL, DB2, Interbase
-
-* fixed problem where subcollections of a collection that changed roles would be deleted
-* changed class loading strategy to be compatible with JBoss
-* stopped queries retrieving unnecessary columns
-* mutable types (binary + serializable) now always detected as dirty
-
-Changes in version 0.9.7 (26.2.2002)
------------------------------------
-* save() now safe from foreign key violations (so create() is no longer preferred method of adding data)
-* delete() now completely safe from foreign key violations - it no longer matters what order objects are deleted in
-* removed Session.copy()
-* hilo generators now NOT for use with application server datasources
-
-* fixed two intermittent bugs in queries
-* fixed a problem where components not detected as dirty
-* fixed broken hilo generator which was not updating database
-* fixed a minor bug when hibernate.use_outer_join was set
-
-Changes in version 0.9.6 (24.2.2002)
------------------------------------
-* experimental XML generation
-* added support for bi-directional associations (one-to-set, set-to-set) with <set readonly="true"> config
-* reflective generation of mappings tool was contributed by Doug Currie
-* Session operations now atomic, so exceptions are recoverable
-* made ID properties optional in persistent classes
-* support for multiple schemas through schema attribute of <hibernate-mapping>, <class>, <set>, <map>, etc.
-* auto-creation of tables for hilo id generators (restriction: cannot use same table from more than one mapping file)
-* added some more assertions to catch user "mistakes" like deleting transient or saving persistent objects
-
-* major rework of collections and fixed some bad bugs
-* lazy initialization re-enabled for one-to-many associations (thanks to Georg Schneemayer)
-* fixed a problem in the mapping DTD to allow nested components in collections
-* fixed a BAD bug in RelationalDatabaseSession when loading objects with PersistentLifecycle callbacks (thanks to Paul Szego)
-* fixed problems with quoted strings in query language
-* fixed a bug where a stack overflow occurred instead of HibernateException thrown (thanks to Georg Schneemayer)
-* fixed a bug deleting updated versioned data
-* fixed some problems with name generation for indexes + foreign keys
-* fixed problem in Sun JDK 1.4 (only?) where IllegalArgumentException was not handled
-* minor improvements to handling of dates and times
-* HiLoGenerator now safe for all transaction isolation levels + safe when rollback occurs
-* noticed and fixed obscure piece of nonthreadsafe code outside of core persistence engine
-* removed unnecessary drop constraints for some dialects
-
-* MUCH more comprehensive test suite
-
-* changed some terminology used in documentation
-* added javadoc for API classes
-* commented the mapping DTD
-
-Changes in version 0.9.5 (8.2.2002)
------------------------------------
-* supports HypersonicSQL (dialect contributed by Phillip Baird)
-* supports Microsoft SQL server (with third party JDBC driver)
-* proper command-line tool for schema generation and export
-* deprecated the interface cirrus.hibernate.Persistent (due to popular demand)
-* changes to hibernate-mapping DTD (required to support optional Persistent interface):
-- deprecated <property type="package.PersistentClassName"/> in favor of <many-to-one class="package.PersistentClassName"/>
-- deprecated <element type="package.PersistentClassName"/> in favor of <many-to-many class="package.PersistentClassName"/>
-- deprecated <property role="..."/> in favor of <collection role="..."/>
-- deprecated <element role=".."/> in favor of <subcollection role="..."/>
-- deprecated <association> in favor of <one-to-many>
-* class attribute optional in <component> and <composite-id> tags (determined by reflection)
-* querying components of components now supported
-* one-shot table creation (no use of unportable "alter table")
-* time dataype support
-* reflective mappings of java.sql.Time, java.sql.Timestamp, java.sql.Date
-* fixed error msg thrown when class is missing a method but has a superclass
-* property names now conform to JavaBean spec ("foo" instead of "Foo"). Note that "Foo" still works
-* constructors of persistent classes may now be non-public
-* collection indexes now mapped to not-null columns
-* fixed obscure bug with querying collections inside components of components
-* fixed potential bug related to cacheing of compiled queries
-* major rewrite of code relating to O-R mappings
-* Session.copy() and Session.equals() as convenience for users
-* fixed repeated invocations of hasNext() on iterator + iterators now always work with distinct SQL resultsets
-* McKoi dialect was contributed by Gabe Hicks
-
-Changes in version 0.9.4 (29.1.2002)
-------------------------------------
-* fixed BAD bug where XML parsing would not work for parsers other than Xerces - thanks to Christian Winkler
-* added some more assertions to catch user "mistakes" like changing ids or reusing existing ids
-
-Changes in version 0.9.3 (27.1.2002)
-------------------------------------
-* repackaged (corrupted DatasourceConnectionProvider.class)
-* better exception reporting using datasource
-* added Datastore.storeClass() which looks for mapping file in classpath (class foo.Bar -> foo/Bar.hbm.xml)
-* improved documentation
-
-Changes in version 0.9.2 (25.1.2002)
-------------------------------------
-* iterate over query results (lazy instantiation of query results)
-* added "select foo, bar" style queries returning multiple objects per row
-* delete by query
-* composite key support
-* outer joins for faster (?) loading of associated objects ( set "hibernate.use_outer_join" to "true" )
-* connection pooling when using DriverManager
-* foreign key constraint from unkeyed collection table to owner entity table
-* improved drop tables script execution (still not infallible)
-* added <composite-element> tag
-* added not-null properties and elements
-* added an optimisation for dates and components
-* made some XML attributes optional
-* fixed errors in documentation + documented some extra features
-* bugfix: store() not getting called on lifecycle interface
-* bugfix: schema generation for indexed associations
-* added many tests
-
-Changes in version 0.9.1 (20.1.2002)
-------------------------------------
-Too many to list
-
-version 0.8.1
--------------
-Initial alpha version
-
Copied: core/tags/hibernate-3.3.0.GA/changelog.txt (from rev 15072, core/branches/Branch_3_3/changelog.txt)
===================================================================
--- core/tags/hibernate-3.3.0.GA/changelog.txt (rev 0)
+++ core/tags/hibernate-3.3.0.GA/changelog.txt 2008-08-14 21:11:12 UTC (rev 15084)
@@ -0,0 +1,2633 @@
+Hibernate Changelog
+===================
+Note: Newer entries are automatically generated and the description might not
+match the actual issue resolution (i.e. a bug might not be a bug). Please
+refer to the particular case on JIRA using the issue tracking number to learn
+more about each case.
+
+
+Changes in version 3.3.0.GA (2008.08.13)
+-------------------------------------------
+
+** Bug
+ * [HHH-2021] - org.hibernate.cache.QueryKey has a fragile equals() method
+ * [HHH-3333] - build Wiki has a typo and includes a lie re:jdk version
+ * [HHH-3378] - DB2CustomSQLTest fails, need "RESULT SETS 1" in proc definitions
+ * [HHH-3430] - distribution bundles cglib directly instead of the hibernate repackaging
+
+** Improvement
+ * [HHH-2926] - All *Event must inherit AbstractEvent
+ * [HHH-3247] - Provide more information in TypeMismatchException message
+
+
+
+Changes in version 3.3.0.CR2 (2008.07.31)
+-------------------------------------------
+
+** Bug
+ * [HHH-1697] - OracleDialect fails to recognize sequence accessible through syonyms when validating schema
+ * [HHH-2604] - Isolator.JdbcDelegate masks the exception if it isn't possible to open a connection.
+ * [HHH-2683] - "datediff" is declared as NoArgSQLFunction in H2Dialect, but actually accepts 3 arguments.
+ * [HHH-3006] - ConcurrentModificationException in AbstractBatcher results in infinite loop
+ * [HHH-3229] - Merge can fail when there is a transient entity reachable by multiple paths and at least one path does not cascade on merge
+ * [HHH-3257] - Content images not displayed
+ * [HHH-3260] - Hibernate wraps a listener init or destroy exception into an AssertionFailure
+ * [HHH-3261] - Do not wrap exceptions raised by event listeners (at init or destroy time)
+ * [HHH-3265] - change license url in pom to http://www.gnu.org/licenses/lgpl-2.1.html
+ * [HHH-3266] - distribution bundle missing jta dependency
+ * [HHH-3272] - using of Integer.valueOf(int), which is not available in JDK 1.4
+ * [HHH-3282] - DB2Dialect should report supportsLobValueChangePropogation() == false
+ * [HHH-3309] - Serialize/Deserialize problem in AbstractLazyInitializer with entitymode.MAP.
+ * [HHH-3409] - ResultTransformers need smarter equals() and hashCode() impls
+
+** Improvement
+ * [HHH-1786] - JTASessionContext.CleanupSynch does not remove sessions from currentSessionMap
+ * [HHH-2060] - To be able to use <generator> with <composite-id>
+ * [HHH-2506] - Make javassist the default ByteCodeProvider
+ * [HHH-2875] - repackage cglib/asm under org.hibernate namespace
+ * [HHH-3269] - upgrade to jDocBook plugin version 2.1.1
+ * [HHH-3283] - protect BulkManipulationTest#testInsertWithGeneratedTimestampVersion where Dialect#supportsParametersInInsertSelect == false
+ * [HHH-3358] - Enable JTATransactionFactory and JTATransaction factory to work without JNDI
+ * [HHH-3390] - Use READ_COMMITTED for JBC 2 cache
+
+** Patch
+ * [HHH-3294] - Version incorrectly incremented for unchanged persistent entity that is parent of a one to many relationship
+
+** Task
+ * [HHH-3270] - follow up on documentation license questions
+
+
+
+Changes in version 3.3.0.CR1 (2008.04.28)
+-------------------------------------------
+
+** Bug
+ * [HHH-1312] - Unclosed ResultSet when using Identity
+ * [HHH-1396] - Table.validateColumns fails on valid column
+ * [HHH-1569] - Immutable Natural Id check fails with ArrayIndexOutOfBounds in some cases
+ * [HHH-1593] - Infinite loop/StackOverflow when calling configuration.setListener(null)
+ * [HHH-1753] - DB2Dialect.getCurrentTimestampSQLFunctionName() uses Oracle syntax
+ * [HHH-1916] - param values in generator element should be trimmed during HbmBinding
+ * [HHH-1920] - Incorrect documentation regarding XML manipulation in Hibernate reference manual (chapter 18.3).
+ * [HHH-1956] - Interceptor.afterTransactionCompletion not called with JTATransaction (CacheSynchronization.hibernateTransaction not set)
+ * [HHH-2159] - NullPointerException in FromElement#findIntendedAliasedFromElementBasedOnCrazyJPARequirements with 'hibernate.query.jpaql_strict_compliance' enabled
+ * [HHH-2164] - Minor bug in section "20.1.1. Customizing the schema"
+ * [HHH-2200] - Memory leak in AbstractBatcher with Generated Properties
+ * [HHH-2320] - Regression: optional properties under a <join> tag no longer update properly
+ * [HHH-2503] - AbstractEntityPersister swallows JDBCExceptions in processGeneratedProperties
+ * [HHH-2513] - Abusive WARN logged during deserialization of replicated SessionFactory
+ * [HHH-2542] - NullPointerException in TypeFactory.replaceAssociations for ComponentType
+ * [HHH-2553] - New LoadContexts Implementation causing possible performance degradation
+ * [HHH-2593] - Keyword UNION is prefixed with "this_." in filter conditions
+ * [HHH-2616] - No event is fired on Collection recreate/remove/update action
+ * [HHH-2627] - Generated properties leak prepared statements in Hibernate 3.2.3 and higher.
+ * [HHH-2631] - Leaking PreparedStatement and ResultSet via CollectionLoadContext instances maintained in Map collectionLoadContexts in LoadContexts
+ * [HHH-2711] - PropertyAccessException with backref and <composite-map-key/>
+ * [HHH-2726] - spelling o your CLASSPATH
+ * [HHH-2728] - Calling session.clear() while retrieving objects via an iterator will cause a "LazyInitializationException - No Session" by the CGLIBLazyInitializer
+ * [HHH-2788] - Oracl8iDialect No Dialect mapping for JDBC type 91
+ * [HHH-2795] - CollectionLoadContexts for empy collections are not removed until PersistenceContext.clear()
+ * [HHH-2816] - DefaultFlushEntityEventListener.checkNaturalId() causes extra SELECTs on read-only entities
+ * [HHH-2833] - insert-select query fails with NPE when select includes join
+ * [HHH-2857] - schemaSupport for HSQLDialect remote connections doesn't work
+ * [HHH-2861] - cascade="delete-orphan,all" is ignored
+ * [HHH-2863] - testsuite fix-ups for maven and/or directory changes
+ * [HHH-2864] - Merging a detached instance with a new child in a unidirectional one-to-many association fails if the parent was previously loaded as a proxy
+ * [HHH-2892] - skip up-to-date checks of query cache for natural-id only if immutable
+ * [HHH-2928] - optimizers for enhanced id generators should be synchronized against multi-threaded access
+ * [HHH-2948] - QueryStatistics.executionMinTime always = 0
+ * [HHH-3111] - WebSphereExtendedJTATransactionLookup$TransactionManagerAdapter.getStatus() implemented incorrect
+ * [HHH-3140] - Region prefix ignored for entities and collections
+
+** Deprecation
+ * [HHH-2755] - Wrong "jsdk.jar" referenced in the tutorial
+
+** Improvement
+ * [HHH-1786] - JTASessionContext.CleanupSynch does not remove sessions from currentSessionMap
+ * [HHH-2048] - Incomplete MappingException at org.hibernate.mapping.SimpleValue
+ * [HHH-2156] - Section 19.3, "Managing the caches" doesn't document CacheMode.IGNORE
+ * [HHH-2533] - redesign Cache/CacheProviders
+ * [HHH-2662] - Workaround PostgreSQL issues in testsuite
+ * [HHH-2663] - Map java.sql.Types.REAL to Hibernate FloatType for auto-discovery stuff
+ * [HHH-2665] - Split Oracle9Dialect into Oracle9iDialect and Oracle10gDialect
+ * [HHH-2669] - Unequivocally map MySQL LOB types to the LONG variant
+ * [HHH-2682] - support for auto-discovery of H2 dialect
+ * [HHH-2696] - Consider migrating to slf4j
+ * [HHH-2761] - Handle null and empty string consistently in PropertiesHelper
+ * [HHH-2778] - TransactionManagerLookup implementation for Bitronix Transaction Manager
+ * [HHH-2789] - Section 19.2 of the documentation does not show OSCache as supporting clusters. It does.
+ * [HHH-2822] - timestamp extraction functions for SAPDBDialect
+ * [HHH-2826] - IS [NOT] NULL checks with component values
+ * [HHH-2859] - Introduce a 'Work' API for user to perform JDBC work
+ * [HHH-3131] - Add a method to ActionQueue to tell whether there are currently entries in the executions collection
+
+** New Feature
+ * [HHH-1] - Optimize Hibernate for the bulk insertion of related entities
+ * [HHH-2555] - Create new RegionFactory for JBossCache
+ * [HHH-2884] - Provide a sessionFactory close event or hook for the event listeners
+
+** Patch
+ * [HHH-952] - Patch to allow subqueries with joins using Criteria API and Subqueries with DetachedCriteria
+ * [HHH-2070] - Expand DB2Dialect auto-discovery support (Martin Renner)
+ * [HHH-2519] - Schema dropping not documented with hibernate.hbm2ddl.auto=create
+ * [HHH-2630] - Hibernate Dialect is not auto-detected for Sybase ASE and DB2 (Shelley McGowan)
+ * [HHH-2758] - Patch IngresDialect based on certification
+ * [HHH-2839] - Don't use dummy dual table for hsqldb (David Bala?ic)
+ * [HHH-2849] - Better error logging in IdentifierGeneratorFactory (Antony Stubbs)
+ * [HHH-2957] - ActionQueue Insertion sort performance degrades exponentially (Jay Erb)
+ * [HHH-3084] - DialectFactory detection of Ingres metadata (Michael Leo)
+
+** Task
+ * [HHH-2702] - Officially move to JDK 1.4
+ * [HHH-2704] - Migrate to Maven2 for build
+
+
+Changes in version 3.2.6 (2008.02.07)
+-------------------------------------------
+
+** Bug
+ * [HHH-925] - DetachedCriteria.createCriteria not working with alias
+ * [HHH-1312] - Unclosed ResultSet when using Identity
+ * [HHH-1329] - SchemaValidator fail when views are involved
+ * [HHH-1593] - Infinite loop/StackOverflow when calling configuration.setListener(null)
+ * [HHH-1685] - DetachedCriteria doesn't create alias on subcriteria
+ * [HHH-1753] - DB2Dialect.getCurrentTimestampSQLFunctionName() uses Oracle syntax
+ * [HHH-1916] - param values in generator element should be trimmed during HbmBinding
+ * [HHH-1956] - Interceptor.afterTransactionCompletion not called with JTATransaction (CacheSynchronization.hibernateTransaction not set)
+ * [HHH-2016] - Oracle9Dialect registers last_day() function as "lastday"
+ * [HHH-2159] - NullPointerException in FromElement#findIntendedAliasedFromElementBasedOnCrazyJPARequirements with 'hibernate.query.jpaql_strict_compliance' enabled
+ * [HHH-2200] - Memory leak in AbstractBatcher with Generated Properties
+ * [HHH-2261] - Setting hibernate.hbm2ddl.auto=validate causes problems on mySQL with numeric fields
+ * [HHH-2320] - Regression: optional properties under a <join> tag no longer update properly
+ * [HHH-2503] - AbstractEntityPersister swallows JDBCExceptions in processGeneratedProperties
+ * [HHH-2542] - NullPointerException in TypeFactory.replaceAssociations for ComponentType
+ * [HHH-2593] - Keyword UNION is prefixed with "this_." in filter conditions
+ * [HHH-2598] - Mapping a collection of entities from two different classes with the same collection name results in duplicate backref property exception if collection keys are not null
+ * [HHH-2616] - No event is fired on Collection recreate/remove/update action
+ * [HHH-2627] - Generated properties leak prepared statements in Hibernate 3.2.3 and higher.
+ * [HHH-2728] - Calling session.clear() while retrieving objects via an iterator will cause a "LazyInitializationException - No Session" by the CGLIBLazyInitializer
+ * [HHH-2788] - Oracl8iDialect No Dialect mapping for JDBC type 91
+ * [HHH-2795] - CollectionLoadContexts for empy collections are not removed until PersistenceContext.clear()
+ * [HHH-2816] - DefaultFlushEntityEventListener.checkNaturalId() causes extra SELECTs on read-only entities
+ * [HHH-2833] - insert-select query fails with NPE when select includes join
+ * [HHH-2857] - schemaSupport for HSQLDialect remote connections doesn't work
+ * [HHH-2861] - cascade="delete-orphan,all" is ignored
+ * [HHH-2864] - Merging a detached instance with a new child in a unidirectional one-to-many association fails if the parent was previously loaded as a proxy
+ * [HHH-2892] - skip up-to-date checks of query cache for natural-id only if immutable
+ * [HHH-2928] - optimizers for enhanced id generators should be synchronized against multi-threaded access
+ * [HHH-2948] - QueryStatistics.executionMinTime always = 0
+
+** Improvement
+ * [HHH-1630] - duplicate property mapping - more details
+ * [HHH-1696] - Add outer join support for aliases on DetachedCriteria
+ * [HHH-2048] - Incomplete MappingException at org.hibernate.mapping.SimpleValue
+ * [HHH-2682] - support for auto-discovery of H2 dialect
+ * [HHH-2761] - Handle null and empty string consistently in PropertiesHelper
+ * [HHH-2822] - timestamp extraction functions for SAPDBDialect
+ * [HHH-2826] - IS [NOT] NULL checks with component values
+ * [HHH-2852] - Better error messages when schema validation fails
+
+** Patch
+ * [HHH-952] - Patch to allow subqueries with joins using Criteria API and Subqueries with DetachedCriteria
+ * [HHH-2070] - Expand DB2Dialect auto-discovery support (Martin Renner)
+ * [HHH-2839] - Don't use dummy dual table for hsqldb (David Bala?ic)
+ * [HHH-2849] - Better error logging in IdentifierGeneratorFactory (Antony Stubbs)
+ * [HHH-2957] - ActionQueue Insertion sort performance degrades exponentially (Jay Erb)
+ * [HHH-3084] - DialectFactory detection of Ingres metadata (Michael Leo)
+
+** Task
+ * [HHH-2559] - http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd needs to be updated
+ * [HHH-3085] - Remove connector.jar (unnecessary library)
+ * [HHH-3086] - Remove jdbc2_0-stdext.jar (unnecessary library)
+
+
+Changes in version 3.2.5 (2007.07.31)
+-------------------------------------------
+
+** Bug
+ * [HHH-1116] - batch-size typo
+ * [HHH-1561] - Missing " in Documentation for H3, Chapter 15.8
+ * [HHH-1569] - Immutable Natural Id check fails with ArrayIndexOutOfBounds in some cases
+ * [HHH-1694] - Documentation Outdated: "10.4.4. Queries in native SQL"
+ * [HHH-2180] - minordocumentation error in hbm xml
+ * [HHH-2201] - session.iterate() does not exist
+ * [HHH-2267] - A copy/paste mistake in the documentation for <schemavalidator> ant task
+ * [HHH-2334] - Documentation error in section 5.1.3
+ * [HHH-2420] - Error in 2.5. Contextual Sessions
+ * [HHH-2502] - The second level caching documentation states that ehcache is not distributed.
+ * [HHH-2631] - Leaking PreparedStatement and ResultSet via CollectionLoadContext instances maintained in Map collectionLoadContexts in LoadContexts
+ * [HHH-2649] - Batcher configuration parameter incorrectly documented
+ * [HHH-2711] - PropertyAccessException with backref and <composite-map-key/>
+ * [HHH-2713] - duplicated phrase in docs "of the of the"
+ * [HHH-2714] - Three typos in code examples
+ * [HHH-2719] - adddress --> address
+ * [HHH-2720] - Monetory --> Monetary
+
+** Improvement
+ * [HHH-1022] - incomplete documentation in _README.txt in the lib directory
+ * [HHH-1682] - Improve the description of differences between save() and persist()
+ * [HHH-2048] - Incomplete MappingException at org.hibernate.mapping.SimpleValue
+ * [HHH-2417] - Update book on Hibernate reference
+ * [HHH-2418] - Refer HSQL DB website in chapter 1.2.3
+ * [HHH-2487] - Typo in "5.1.7. version (optional)"
+ * [HHH-2550] - Update API Class in 10.4.3. Criteria queries
+ * [HHH-2662] - Workaround PostgreSQL issues in testsuite
+ * [HHH-2663] - Map java.sql.Types.REAL to Hibernate FloatType for auto-discovery stuff
+ * [HHH-2665] - Split Oracle9Dialect into Oracle9iDialect and Oracle10gDialect
+
+** Patch
+ * [HHH-2520] - Miscellaneous config doc spelling fixes
+ * [HHH-2630] - Hibernate Dialect is not auto-detected for Sybase ASE and DB2 (Shelley McGowan)
+ * [HHH-2758] - Patch IngresDialect based on certification
+
+** Task
+ * [HHH-2551] - Deprecate org.hibernate.criterion.Expression
+ * [HHH-2566] - Replace usages of FlushMode.NEVER with FlushMode.MANUAL
+ * [HHH-2567] - Update reference to use FlushMode.MANUAL
+ * [HHH-2568] - Hibernate javadoc overview refering wrong classes and packages
+
+
+Changes in version 3.2.4.sp1 (2007.05.18)
+-------------------------------------------
+
+** Bug
+ * [HHH-2605] - Since 3.2.4 no value specified for row id
+ * [HHH-2613] - LockMode.FORCE on non versioned entity leads to NPE
+
+
+Changes in version 3.2.4 (2007.05.09)
+-------------------------------------------
+
+** Bug
+ * [HHH-511] - reattach object from same session
+ * [HHH-2316] - org.hibernate.cache.CacheKey.equals() can cause PropertyAccessException to be thrown
+ * [HHH-2553] - New LoadContexts Implementation causing possible performance degradation
+ * [HHH-2602] - instrumented many-to-one problem with aggressive release
+
+** Deprecation
+ * [HHH-2603] - Deprecate the Session.connection() method
+
+** Improvement
+ * [HHH-2549] - Warn users explicitly about schemaexport and schemaupdate does not support annotations
+
+** New Feature
+ * [HHH-1] - Optimize Hibernate for the bulk insertion of related entities
+
+** Patch
+ * [HHH-2301] - Identity generator with custom insert SQL broken in 3.2 (Scott Rankin and Gail Badner)
+ * [HHH-2336] - paremeterizable and typedef-able UserCollectionType (Holger Brands)
+ * [HHH-2580] - Performace: Too many lookups of WAS extended transaction support (Jesper Udby)
+
+
+Changes in version 3.2.3 (2007.04.02)
+-------------------------------------------
+
+** Bug
+ * [HHH-2376] - Query with fully qualified entity class fails
+ * [HHH-2392] - LockModes referencing non-root joined-subclass class in HQL/Criteria
+ * [HHH-2393] - Generated properties leave open ResultSet on Batcher to be closed on transaction completion
+ * [HHH-2397] - hilo generator can generate negative numbers because of arithmetic overflow
+ * [HHH-2469] - ArrayIndexOutOfBoundsException during update by rowid
+ * [HHH-2476] - PersistentMap.put() incorrect on uninitialized, non-extra-lazy map
+ * [HHH-2481] - Big memory leak in the use of CGLIB
+ * [HHH-2499] - incorrect assertion failure relating to generated property values
+ * [HHH-2513] - Abusive WARN logged during deserialization of replicated SessionFactory
+ * [HHH-2521] - Fix cascading of merge across component properties
+ * [HHH-2532] - update/delete executeUpdate() causes problems with JBossCache (at least in opt-locking setups)
+
+** Improvement
+ * [HHH-2495] - encapsulate the notion of state pertaining to processing a result set
+ * [HHH-2534] - better error message for illegal 'collection dereference' in HQL query
+ * [HHH-2535] - Change Cache' Cache71Dialect so that sequence support returns false
+
+** New Feature
+ * [HHH-2471] - create a set of "enhanced" generators
+ * [HHH-2500] - apply Terradata certification results
+
+** Patch
+ * [HHH-2367] - InformixDialect uses wrong data type
+ * [HHH-2489] - SQL comments for HQL bulk operations
+
+
+Changes in version 3.2.2 (2007.01.24)
+-------------------------------------------
+
+** Bug
+ * [HHH-1471] - If the 'generated' attribute is set to 'insert' or 'always' on the property of a component it is ignored and the value is not read from the database.
+ * [HHH-1646] - Bad code in FastClass.equals
+ * [HHH-1889] - LockMode.UPGRADE not applied in all cases for SQL Server / Sybase
+ * [HHH-2112] - ClassCastException in StatefulPersistenceContext.getCachedDatabaseSnapshot(...)
+ * [HHH-2221] - MySQL temp table DDL and isolation
+ * [HHH-2238] - SQLQuery executeUpdate doesn't respect Query.setFlushMode()
+ * [HHH-2251] - Settings build unnecessary in schemaupdate/schemavalidate
+ * [HHH-2257] - Query.iterate() results differ from Query.list() 2
+ * [HHH-2259] - autoflush and autoclose not longer occur in JTA environment with hibernate 3.2
+ * [HHH-2264] - NPE when NamedQuery contains space before variable name
+ * [HHH-2274] - Collection ordering when many to many order by is used is not respected
+ * [HHH-2275] - Mapping a composite element as a map key using formulas can lead to AOOBE
+ * [HHH-2284] - HQL: selecting components inside components doesn't work
+ * [HHH-2291] - collection based on property-ref not handled correctly during reattch
+ * [HHH-2292] - merge detached instance fails to persist collection changes in case of bare collection reference
+ * [HHH-2356] - NullableType.toString(Object) should account for nulls
+ * [HHH-2366] - Changing a component's value does not trigger an update during flush
+ * [HHH-2378] - replicate() of non-versioned entiy can result in wrong value for version in entity cache
+
+** Improvement
+ * [HHH-1851] - relax special handling of 'id' property
+ * [HHH-2130] - SQLQuery does not autoflush all entities used in the query
+ * [HHH-2193] - Introduce a flag to avoid checking NamedQuery at startup
+ * [HHH-2242] - Consider Allowing Optimistic Lock Strategies other than 'Version' with joined-subclass
+ * [HHH-2250] - Create an appropriate error message if Query.setEntity is passed a NULL value
+ * [HHH-2282] - PersistentClass property lookups do not properly account for embedded composite identifiers
+ * [HHH-2286] - dialect informational metadata
+ * [HHH-2372] - Allow tooling to create Settings via SettingsFactory without contacting the db
+
+** New Feature
+ * [HHH-2246] - No way to specify CACHE_PROVIDER_CONFIG in HibernateServiceMBean
+
+** Patch
+ * [HHH-2300] - Updated dialect for H2 database engine
+ * [HHH-2371] - enhancements to C3P0ConnectionProvider
+
+** Task
+ * [HHH-2032] - update c3p0 to 0.9.1
+
+
+
+Changes in version 3.2.1 (2006.11.16)
+-------------------------------------------
+
+** Bug
+ * [HHH-939] - 'class' property in HQL results in incorrect SQL for joined-subclass
+ * [HHH-1401] - session.merge() executes unnecessary updates when one-to-many relationship is defined.
+ * [HHH-1460] - Inconsistent behavior when using Session.get() with multiple subclasses
+ * [HHH-1564] - deleting versioned object with collection leads to unecessary update
+ * [HHH-1629] - SchemaUpdate/validator doesn't listen to quoting
+ * [HHH-1631] - Missing table in SQL from clause that is referenced in where clause when using joined subclass
+ * [HHH-1651] - hibernate does not find an existing sequence from an Oracle database
+ * [HHH-1663] - <any/> with collection will produce "AssertionFailure: collection was not processed by flush()"
+ * [HHH-1737] - Add a ConnectionWrapper interface to allow access to the underlying connection from a BorrowedConnectionProxy
+ * [HHH-1756] - Proxy objects are not removed from the BatchFetchQueue during a session evict
+ * [HHH-1774] - Component parameters bound incorrectly
+ * [HHH-1921] - "dirty, but no dirty properties" thrown when Interceptor resets properties.
+ * [HHH-1986] - javassist throws InvocationTargetException instead of original checked Exception
+ * [HHH-2027] - merge listener over-writes Interceptor changes to component state for a transient entity
+ * [HHH-2044] - DefaultMergeEventListener.entityIsDetached call StaleObjectStateException with wrong identifier
+ * [HHH-2082] - UpdateTimestampsCache.isUpToDate returns before checking all spaces
+ * [HHH-2108] - cacheable files broken
+ * [HHH-2138] - merge with bidirectional one-to-one may fail
+ * [HHH-2145] - set.retainAll calling set.addAll
+ * [HHH-2174] - Wrong log message in SessionImpl.afterTransactionCompletion(...)
+ * [HHH-2199] - Unique constraints on nullable columns should not be generated with unique-key is used and supportsNotNullUnique=false
+ * [HHH-2202] - Clearing the connection warnings even when log is > WARN to workaround a Sybase issue
+ * [HHH-2206] - SessionImpl tries to deserialize itself in an incorrect order
+ * [HHH-2207] - Suggested fix for HQL - MySQL setMaxResults issue
+ * [HHH-2226] - org.hibernate.hql.ast.tree.FromElementType contains warning log message that should be debug instead
+ * [HHH-2229] - Performance issue with fix for HHH-1293, CGLIBLazyInitializer may be slower for certain Java classes
+ * [HHH-2236] - Lazy property + setReadOnly + Instrumented classes results in NullPointerException when accessing lazy property
+
+** Improvement
+ * [HHH-2037] - provide Query.setProperties(Map)
+ * [HHH-2042] - Typo in FlushMode.MANUAL Javadoc
+ * [HHH-2057] - Add "remove" cascading style to CascadeStyle for XML mappings
+ * [HHH-2127] - Document <filter-def condition="defaultCondition"> and <filter-def>defaultCondition
+ * [HHH-2135] - Hibernate Deserialization: In org.hibernate.type.SerializableType the code makes a test for the return of a null object by simply testing the object as to whether or not it is null.
+ * [HHH-2185] - introduce setting to control cglib caching of classes
+ * [HHH-2203] - Make Post*Events extend AbstractEvent
+ * [HHH-2208] - Table schema use in DatabaseMetadata
+ * [HHH-2209] - ehcache.jar is old and does not contain the SingletonCacheProvider which are advised in exception messages
+ * [HHH-2217] - Collection write methods and dirtying the collection
+
+** New Feature
+ * [HHH-2205] - Dialect for Intersystems' Cache SQL 2007.1
+
+** Patch
+ * [HHH-1767] - read-only cache for immutable collection causes unnecessary warning
+
+** Task
+ * [HHH-2219] - Upgrade to Javassist 3.4
+
+
+Changes in version 3.2.0.ga (16.10.2006)
+-----------------------------------------
+(retag of 3.2.0.cr5 (2006.10.16))
+
+Changes in version 3.2.0.cr5 (04.10.2006)
+-------------------------------------------
+
+** Bug
+ * [HHH-1668] - PersistentSet write methods mark collection as dirty even if entry is not written
+ * [HHH-1714] - Session.get() behavior
+ * [HHH-1891] - Since rc3 deprecation Warning: The syntax 'TYPE=storage_engine' is deprecated and will be removed in MySQL 5.2.
+
+** Improvement
+ * [HHH-2093] - PERSIST_ON_FLUSH ineffective for recursive object graphs
+ * [HHH-2103] - Rolling back 'SELECT is mandatory' on JPA strict compliance
+
+** Task
+ * [HHH-1931] - verify that the instrument tasks actually work
+
+
+Changes in version 3.2.0.cr4 (24.08.2006)
+-------------------------------------------
+
+** Bug
+ * [HHH-1293] - java.lang.NoSuchMethodError: <persistent class>.getHibernateLazyInitializer()
+ * [HHH-1677] - optimistic-lock="dirty|all" is ignored at delete time
+ * [HHH-1710] - persistent collections with property-ref to secondary tables cannot be joined in HQL
+ * [HHH-1713] - AbstractEntityPersister causes an exception when a row in a joined table is missing with fetch="select"
+ * [HHH-1740] - Build-time instrumentation breaks lazy="proxy"
+ * [HHH-1750] - Exception ORA-01000 too many open cursors by generated="insert"
+ * [HHH-1806] - No Dialect mapping for JDBC type: 3
+ * [HHH-1848] - A session.lock generates a query with a version column in a joined subclass which does not exist
+ * [HHH-1892] - finish HHH-1789 for ordered and sorted collections
+ * [HHH-1898] - With hibernate 3.2.0-cr3 there is an hql parsing error on a one-to-one relation
+ * [HHH-1924] - ForeignKeys: TransientObjectException is thrown without a message because of a wrong bracket in the code
+ * [HHH-1927] - persist() and then merge() not handled correctly for multiple entity instances representing the same logical state
+ * [HHH-1937] - Proxy creation failure leads to NPEs
+ * [HHH-1943] - PersistenceContext not checked to see whether the associated entity is transient or not
+ * [HHH-1944] - generated subqueries and jpaql compliance (derived select clause) check
+ * [HHH-1947] - OF part of MEMBER OF is optional
+ * [HHH-1948] - Query Idetification variables are case insensitive in JPA
+ * [HHH-1949] - having trim(BOTH from c.name) translated into having ltrim(rtrim(BOTH)) on DB2
+ * [HHH-1954] - Proxies are never unassociated (evicted) from a session
+ * [HHH-1958] - session.lock(LockMode.FORCE) can lead to NPE
+ * [HHH-1963] - meta inheritance broken
+ * [HHH-1992] - Some cascade actions should not trigger a property access on lazy properties
+ * [HHH-2001] - javaassist does not setup the proper protection domain thus does not work with signed/secured deployments such as webstart
+ * [HHH-2015] - where= does not set parenthesis leading to unexpected query when multiclause are used
+ * [HHH-2017] - locate function defined on Oracle9Dialect is incorrect
+ * [HHH-2022] - property names beginning with underscores cause Hibernate to generate invalid aliases
+
+** Improvement
+ * [HHH-1470] - Enhance Hibernate-Mapping DTD Definition of type element
+ * [HHH-1934] - logging NonUniqueObjectException and WrongClassException
+ * [HHH-1941] - Be more specific about x not found and invalid mapping exceptions to allow tools to tell about it
+ * [HHH-1968] - unify bytecode instrumentation
+ * [HHH-1980] - disallow the mapping combination of <version/> and optimistic-lock
+ * [HHH-2005] - more standard build script
+ * [HHH-2023] - performance optimization of JTATransactionFactory.isTransactionInProgress()
+
+** Patch
+ * [HHH-1271] - When using Stored Procedure for update or delete, the check is not done correctly.
+
+** Task
+ * [HHH-1931] - verify that the instrument tasks actually work
+
+
+Chages in version 3.2 cr3 (2006.07.06)
+-------------------------------------------
+
+** Bug
+ * [HHH-1452] - Native SQL query is missing join if entity includes many-to-one on secondary table
+ * [HHH-1507] - one-to-one can have formula or meta but not both of them.
+ * [HHH-1552] - Error when using ?1 and parameterList
+ * [HHH-1586] - ClassCastException in CollectionType.toLoggableString if using CustomCollectionType
+ * [HHH-1732] - EhCache.toMap still assumes Serializable objects
+ * [HHH-1734] - Connection leak when using hilo strategy in SE environment
+ * [HHH-1741] - Bug in reference documentation
+ * [HHH-1746] - NullPointerException at IdentNode.resolveAsNakedComponentPropertyRefLHS(IdentNode.java:195
+ * [HHH-1748] - Setting a comment that contains a single quote on a query results in an unintuitive exception
+ * [HHH-1763] - Bug in InputStream org.hibernate.util.ConfigHelper.getResourceAsStream(String resource)
+ * [HHH-1791] - property update="false" ignored since 3.2.0.cr2
+ * [HHH-1816] - serializing session from a named session factory to a different vm broken
+ * [HHH-1822] - flushing entity linked to transient instance (non cascaded) should always fail
+ * [HHH-1828] - registering a transaction marked for Rollback is illegal
+ * [HHH-1833] - Not Generating HibernateException
+ * [HHH-1838] - Wrong SQL generated for hql query on "any" relation
+ * [HHH-1855] - booleans not properly handled in assignment clause of UPDATE statements
+ * [HHH-1858] - wrong sql generated against many-to-any association table
+ * [HHH-1871] - query type autodiscovery assume wrong column when mixing entities and scalars
+
+** Deprecation
+ * [HHH-1792] - Callable update/insert/delete statements should not force rowcount out parameter
+
+** Improvement
+ * [HHH-1617] - Check the second-level cache before adding a PK to a batch fetch
+ * [HHH-1773] - Typo in ImprovedNamingStrategy
+ * [HHH-1779] - Allow Session.remove() on transient object
+ * [HHH-1789] - improve efficiency of collection initialization from L2 cache hits
+ * [HHH-1795] - default cache provider to NoCacheProvider
+ * [HHH-1796] - TreeCache based providers and Fqn
+ * [HHH-1800] - session.get() / load() should raise exception when the id is of the wrong type
+ * [HHH-1818] - remove() should force subsequent contains() calls to return false
+ * [HHH-1831] - Batch loading the same EntityKey (one side of manytoone ) more than once
+ * [HHH-1861] - More complete component handling in HQL
+ * [HHH-1881] - introduce LoggableUserType interface
+
+** New Feature
+ * [HHH-1709] - Be able to raise ENFE rather than LIE in proxies
+ * [HHH-1727] - Add a SQLFunctionRegistry
+ * [HHH-1817] - Introduce setting for JPA-QL strict compliance
+ * [HHH-1826] - Built-in type for char[] -> VARCHAR Byte[] and Character[]
+
+** Patch
+ * [HHH-1558] - Dialect for new database engine H2
+ * [HHH-1847] - QBE 'like' clause with backslashes don't work with MySQL
+
+** Task
+ * [HHH-1839] - rename FlushMode.NEVER -> FlushMode.MANUAL
+
+
+Changes in version 3.2 cr2 (2006.05.05)
+-------------------------------------------
+
+** Bug
+ * [HHH-1114] - The first (HSQL) Hibernate Application doesn't work as expected due to lack of database shutdown
+ * [HHH-1175] - Exception when loading inheritance mapping in single file
+ * [HHH-1560] - PropertiesHelper.resolvePlaceHolders() fails with non-String values in System properties
+ * [HHH-1620] - Errors on max_lo <=1 boundaries
+ * [HHH-1625] - Hibernate.isPropertyInitialized() returns false on instrumented transient object
+ * [HHH-1648] - Exception while resuming a transaction is silently eaten
+ * [HHH-1674] - Configuration serialization error: filterDefinitions map not serializable
+ * [HHH-1695] - subsequent calls to non-existent proxy causes NPE
+
+** Improvement
+ * [HHH-1266] - StatelessSession can implement refresh
+ * [HHH-1414] - many-to-many and metadata order-by based on column from the target table
+ * [HHH-1477] - Improve naming strategy for ANN-195
+ * [HHH-1538] - aggregations functions in EJBQL queries does not return the appropriate types
+ * [HHH-1670] - Update EhCache and EhCache provider to support EhCache 1.2
+ * [HHH-1704] - Deduplicate unique constraints generation sharing the same column(s)
+
+** New Feature
+ * [HHH-870] - support SQL updates in named queries
+ * [HHH-1591] - Replace LazyInitializationException by EntityNotFoundException
+ * [HHH-1719] - Provide a ClassTransformer interface to the BytecodeProvider
+
+
+Changes in version 3.2 cr1 (2006.03.27)
+-------------------------------------------
+
+** Bug
+ * [HHH-1453] - Broken exception handling in NullableType
+
+** Improvement
+ * [HHH-227] - remove reflection optimizer
+ * [HHH-587] - Make ResultTransformer available for all query methods
+ * [HHH-1588] - delay inserts for insert-generated-identifiers outside transaction
+ * [HHH-1590] - redesign how PostInsertIdentifierGenerators are handled at insertion
+ * [HHH-1592] - allow SelectGenerator to use a defined natural-id (if one)
+
+** New Feature
+ * [HHH-332] - create ability to add resulttransformer to HQL query
+ * [HHH-1179] - support inline sequence id generation on Oracle using RETURNING clause
+
+
+Changes in version 3.2 alpha2 (2006.03.15)
+-------------------------------------------
+
+** Bug
+ * [HHH-535] - properties element causes exception in interface/abstract class
+ * [HHH-1325] - ArrayOutOfBounds expected in DatabaseMetadata.isTable when specifing schema
+ * [HHH-1435] - many-to-one lazy seems to be broken in 3.1.x
+ * [HHH-1531] - NPE with many-to-many and property-ref
+ * [HHH-1546] - generated version properties fail with multiple actions per flush
+
+** Improvement
+ * [HHH-1540] - Better Error Feedback In CollectionEntry.postFlush(PersistentCollection)
+ * [HHH-1555] - ConnectionReleaseMode.AFTER_STATEMENT and flushes
+ * [HHH-1559] - introduce TransactionFactory.isTransactionInProgress to facilitate EJB3 joinTransaction handling
+
+
+Changes in version 3.2 alpha1 (2006.02.28)
+-------------------------------------------
+
+** Bug
+ * [HHH-687] - Exception QuerySyntaxError not really serializable
+ * [HHH-1236] - Remove static reference to classloader, to avoid memory leak at webapp reload
+ * [HHH-1287] - Problem with WAS ExtendedJTATransaction not available when using MDB
+ * [HHH-1419] - Update + Exists doesn't seem to work
+ * [HHH-1445] - SchemaUpdate closes shared ConnectionProvider
+ * [HHH-1464] - QueryException from Query.getReturnAliases when query uses "fetch"
+ * [HHH-1486] - Concurrent access issues with both SoftLimitMRUCache and SimpleMRUCache
+ * [HHH-1508] - Session.createQuery() should not flush the session
+
+** Improvement
+ * [HHH-1411] - Collection fetches and DISTINCT
+ * [HHH-1412] - Collection fetches and firstResult/maxRows
+ * [HHH-1416] - LockMode.FORCE to implement EJB3 LockModeType.WRITE
+ * [HHH-1457] - support new optimisitc locking capabilities of JBossCache
+ * [HHH-1466] - better handling of Antlr exceptions
+ * [HHH-1516] - support DataDirect standard jdbc stored procedures
+ * [HHH-1518] - Guarentee LockMode behaviors
+ * [HHH-1520] - with clause with implied joins within an explicit join
+ * [HHH-1526] - Improved DTDEntityResolver
+
+** New Feature
+ * [HHH-1251] - Avoid replicating the clearing of TreeCache on SessionFactory..close()
+ * [HHH-1410] - FlushMode.AUTO -> COMMIT when outside a transaction
+ * [HHH-1447] - pluggable bytecode libraries
+
+
+Changes in version 3.1.2 (01.27.2006)
+-------------------------------------------
+
+** Bug
+ * [HHH-73] - Statistics for HQL queries use pre-processed query string
+ * [HHH-1306] - HQL parsing problem with join fetching of arrays/collections of values
+ * [HHH-1370] - Warning in hibernate-mapping-3.0.dtd
+ * [HHH-1371] - MappingException is thrown when the same column is referenced with different case
+ * [HHH-1386] - Numeric (long) literals not properly handled by HQL parser
+ * [HHH-1390] - Session.isOpen() throws exeception when the session is closed with ThreadLocalSessionContext
+ * [HHH-1391] - Invalid parameter index SQLException when using named parameters after positional parameters
+ * [HHH-1392] - Proxies cannot be serialized after session is closed
+ * [HHH-1398] - extends and entity-names broken with mapping-level package attribute
+ * [HHH-1407] - return-join broken for entity collections
+
+** Improvement
+ * [HHH-1364] - Defensive check of isClosed when obtaining a connection from ConnectionManager
+ * [HHH-1367] - warn level log "this operation breaks ==" may be disturbing
+
+** New Feature
+ * [HHH-1372] - Support for MySQL5 new varchar length
+
+** Patch
+ * [HHH-1005] - Criteria LEFT JOIN capability when adding Order to associations
+
+** Task
+ * [HHH-1373] - Document update versioned
+
+
+Changes in version 3.1.1 (01.13.2006)
+-------------------------------------------
+
+** Bug
+ * [HHH-853] - DML-style HQL queries and associations
+ * [HHH-1281] - FORWARD_ONLY ScrollableResults#next() throw GenericJDBCException
+ * [HHH-1286] - Set entity in HQL query without prefix -> incorrect SQL
+ * [HHH-1308] - Session.createFilter(...).iterate() results in bogus column names for result set extraction
+ * [HHH-1314] - float/double literals not sent to the database correctly
+ * [HHH-1316] - SchemaUpdate : java.sql.SQLException: You cannot commit during a managed transaction!
+ * [HHH-1328] - org.hibernate.util.SimpleMRUCache keeps a soft reference to the cache key, so cached values get collected prematurely
+ * [HHH-1336] - ForeignGenerator does not handle transient entities with an entity-name properly
+ * [HHH-1337] - Mapped <component> generated column names incorrect with ImprovedNamingStrategy
+ * [HHH-1349] - HQL delete statement problem due to oracle lacking table aliases in delete clause
+ * [HHH-1361] - creating temporary table for bulk delete will commit current transaction in managed environment such as J2EE
+
+** Improvement
+ * [HHH-1019] - Native SQL return-property mapping doesn't support dot-syntax in return-property for components
+ * [HHH-1290] - Defensive checking of session status
+ * [HHH-1302] - query.getReturnTypes inconsistent
+ * [HHH-1304] - better handling of borrowed connections in non-ON_CLOSE release semantics
+ * [HHH-1309] - schemaupdate does not handle TableHiLoGenerator
+ * [HHH-1339] - empty property name in mapping file gives imcomprehensible error message
+ * [HHH-1344] - ANSI-SQL trim function for SQLServer
+ * [HHH-1345] - ANSI-SQL mod function for SQLServer
+ * [HHH-1346] - ANSI-SQL bit_length function for SQLServer
+ * [HHH-1351] - <return-scalar name="blah"/> should be possible
+ * [HHH-1360] - set autodiscovery flag for SQLQueries when resultsetmappings are used
+
+
+Changes in version 3.1 (12.12.2005)
+-------------------------------------------
+
+** Bug
+ * [HHH-849] - Cartesian product + implicit joins
+ * [HHH-1065] - user provided connection not usable by default due to agressive release changes
+ * [HHH-1101] - associations join fetched in HQL without owner being selected
+ * [HHH-1133] - Comparators, defined for collections in mapping files, are not set
+ * [HHH-1149] - NPE flushing reattached entity w/ non-mutable natural-id
+ * [HHH-1170] - HQL 'cast' function doesn't work with MySQL 4 when casting to string
+ * [HHH-1187] - Cannot delete a object having a delete-orphan collection when user_rollback_id is set
+ * [HHH-1191] - HQL fails backward compatibility using classic translator
+ * [HHH-1194] - hql delete statements with joined-subclass hierarchies with a mapped where attribute at the root
+ * [HHH-1206] - Mappings.TableDescription is not serializable
+ * [HHH-1212] - mismatch in entity-modes defined in DTD and EntityMode class
+ * [HHH-1227] - ClassCastException on DOM4J replicate of Calendar property
+ * [HHH-1239] - BinaryArithmeticOperatorNode.getDataType() does not properly handle date/time arithmetic
+ * [HHH-1240] - Track connection leakage in JDBCContext.afterTransactionCompletion()
+ * [HHH-1245] - Calling the Session should register it with the current JTA txn.
+ * [HHH-1254] - Serialization of Sessions using JDBCTransactions with auto-flush/auto-close
+
+** New Feature
+ * [HHH-1222] - Autodiscover scalar types in native-sql
+ * [HHH-1243] - allow placeholders to system properties in config properties
+ * [HHH-1244] - Support for MySQL5 stored procedures
+ * [HHH-1260] - Configuration.mergeProperties()
+
+** Task
+ * [HHH-1066] - Upgrade CGLIB to fix proxy memory leak
+ * [HHH-1242] - upgrade ANTLR to 2.7.6rc1
+
+** Improvement
+ * [HHH-860] - insert ... select ... and version numbers
+ * [HHH-926] - TypeDef should be global
+ * [HHH-1138] - No ConstraintName when using PostgreSQL
+ * [HHH-1144] - Implement naming convention for temporary test failures
+ * [HHH-1153] - PropertiesHelper fails reading primitive values from hibernate-mapping when doc has whitespace
+ * [HHH-1182] - Access to filter metadata
+ * [HHH-1183] - Getting sql "plan" for DML operations
+ * [HHH-1197] - Support for HQL delete on MaxDB
+ * [HHH-1198] - post-insert event pass the entity wo the id field filled when the generator is identity
+ * [HHH-1213] - make JACC event listeners auto configurable (through initialize(Configuration))
+ * [HHH-1215] - Added support for LVARCHAR in InformixDialect
+ * [HHH-1218] - Add concat() function support to SAPDBDialect
+ * [HHH-1255] - ThreadLocalSessionContext and Session serialization
+
+** Patch
+ * [HHH-967] - executeUpdate on StatelessSession
+ * [HHH-1172] - Missing configuration templates for the new MimerSQLDialect
+
+** Deprecation
+ * [HHH-1229] - deprecate ability for entities to not define identifier properties
+
+
+Changes in version 3.1 rc3 (17.11.2005)
+-------------------------------------------
+
+** Bug
+ * [HHH-755] - Setter / Getter for property gDate are wrong
+ * [HHH-764] - XML mapping
+ * [HHH-1034] - The connection is closed *outside* the JTA transaction in TransactionHelper
+ * [HHH-1062] - java:comp/UserTransaction not correct for JBoss
+ * [HHH-1064] - Exception using JTATransaction in WebSphere 6
+ * [HHH-1069] - Unnecessary commas generated in select with left outer joins
+ * [HHH-1075] - New parser "not exists" command bug
+ * [HHH-1077] - Typo in docs: "equiped"
+ * [HHH-1080] - HQL delete fails on entities with where-fragments using operators other than '='
+ * [HHH-1081] - missing parens in example code for Criteria Associations
+ * [HHH-1084] - incorrect method name "sql" in Restrictions example, should be "sqlRestriction"
+ * [HHH-1091] - Can't write transparent CurrentSessionContext for BMT
+ * [HHH-1098] - Patch for build.sh to be able to build latest version on linux
+ * [HHH-1106] - HQL "not in" generatad wrong SQL
+ * [HHH-1111] - JDBCTransaction.rollback() results in a call to Interceptor.beforeTransactionCompletion()
+ * [HHH-1128] - Column alias clashes under certain circumstances
+ * [HHH-1146] - latest cvs(11/10/05) hibernate3 issue with classic query
+ * [HHH-1156] - StatefulPersistenceContext not serializable when property-ref is used
+ * [HHH-1160] - Incorrect use of getGeneratedKey() for Oracle
+
+** New Feature
+ * [HHH-449] - korean hibernate reference manual
+ * [HHH-1129] - use expected-type in 'untyped' Query.setParameter()
+
+** Improvement
+ * [HHH-221] - Proxy for one-to-one with property-ref
+ * [HHH-844] - move parameter "bookkeeping" into QueryTranslator
+ * [HHH-1051] - "Compiled" native SQL queries are not cached
+ * [HHH-1061] - import.sql should allow more human readable and usable files
+ * [HHH-1078] - <dynamic-component> requires type on property
+ * [HHH-1120] - Make NamingStrategy to work nicely with HA and EJB3 naming strategy
+ * [HHH-1142] - added getSelectSequenceNextValString() and getCurrentTimestampSelectString() to TimesTenDialect
+
+** Patch
+ * [HHH-1063] - support for 'locate' function in SQLServer and Sybase dialects
+ * [HHH-1090] - Allow subqueries on criteria to obtain non-string results
+ * [HHH-1095] - Hibernate takes incorrect HasCode when a lot of CompositeKeys and Lazy loading is involved
+ * [HHH-1103] - finalize method filter for proxies
+ * [HHH-1136] - more meaningful AssertionFailure message in org.hibernate.persister.entity.JoinedSubclassEntityPersister.getTableId(...)
+
+
+Changes in version 3.1 rc2 (17.10.2005)
+-------------------------------------------
+** Bug
+ * [HHH-1045] - Example contains inner classes that aren't serializable
+ * [HHH-1055] - optimistic-lock is not inherited from class to subclass et.al.
+
+** Improvement
+ * [HHH-702] - auto detect aliasing for collection properties (coll.key, coll.id etc.)
+ * [HHH-1038] - make 'auto' the default for hibernate.connection.release_mode
+ * [HHH-1042] - determine "expected type" of parameters during HQL parsing
+
+
+Changes in version 3.1 rc1 (07.10.2005)
+-------------------------------------------
+** Bug
+ * [HHH-528] - component.manyToOne.id in HQL causes join
+ * [HHH-871] - Configuration.setListener(String type, Object listener) throws ClassCastException
+ * [HHH-873] - referencing raw HQL FromElement alias outide the from clause of update and delete statements generates incorrect sql
+ * [HHH-876] - PreparedStatement being closed before being executed by AbstractBatcher
+ * [HHH-884] - SchemaExport does not propagate parent indexes to <union-subclass> tables
+ * [HHH-887] - Aggressive release and Session.connection()
+ * [HHH-893] - custom tuplizer are not instantiated for components
+ * [HHH-905] - $PlaceHolder$ remains in generated SQL when filter is enabled
+ * [HHH-907] - optimistic-lock="false" for timestamped object results in SQLException: Invalid column index
+ * [HHH-908] - CLONE -NullPointerException when using BigInteger in a query
+ * [HHH-911] - CGLIBLazyInitializer and Exceptions
+ * [HHH-913] - NPE in CMTTransaction since javax.transaction.Transaction is never set
+ * [HHH-918] - impossible to move objects to another session
+ * [HHH-924] - Useless OracleErrorCodeConverter (and possibly others)
+ * [HHH-932] - HQL UPDATE and <union-subclass>
+ * [HHH-946] - QuerySyntaxException might not be serializable
+ * [HHH-964] - ORA-00936 with joined subclass / Oracle
+ * [HHH-986] - Need to check Thread.currentThread().getContextClassLoader() in ConfigHelper
+ * [HHH-991] - Cannot use comparator class
+ * [HHH-1000] - varchar(xxx char) not supported on Oracle8i
+
+** New Feature
+ * [HHH-950] - interface for SessionFactory.getCurrentSession() handling
+
+
+** Improvement
+ * [HHH-608] - update HSQLDialect for HSQL 1.8 sequence support
+ * [HHH-889] - Add read-only cache-mode comment in <query and <sql-query
+ * [HHH-898] - OracleDialect UTF8 varchar2
+ * [HHH-909] - Onquoted primary key in IncrementGenerator
+ * [HHH-988] - generated="never|insert|always"
+ * [HHH-989] - add discussion of implicit and explcit joins
+ * [HHH-1011] - Make disconnect/reconnect of a Session implicit
+
+** Patch
+ * [HHH-994] - Sybase/SQLServer support for temporary tables
+
+
+Changes in version 3.1 beta 3 (13.09.2005)
+-------------------------------------------
+** Bug
+ * [HHH-528] - component.manyToOne.id in HQL causes join
+ * [HHH-871] - Configuration.setListener(String type, Object listener) throws ClassCastException
+ * [HHH-873] - referencing raw HQL FromElement alias of update and delete statements
+ * [HHH-876] - PreparedStatement being closed before being executed by AbstractBatcher
+ * [HHH-884] - SchemaExport does not propagate parent indexes to <union-subclass> tables
+ * [HHH-887] - Aggressive release and Session.connection()
+ * [HHH-893] - custom tuplizer are not instantiated for components
+ * [HHH-905] - $PlaceHolder$ remains in generated SQL when filter is enabled
+ * [HHH-907] - optimistic-lock="false" for timestamped object results in SQLException: Invalid column index
+ * [HHH-908] - NullPointerException when using BigInteger in a query
+ * [HHH-911] - CGLIBLazyInitializer and Exceptions
+ * [HHH-913] - NPE in CMTTransaction since javax.transaction.Transaction is never set
+ * [HHH-918] - impossible to move objects to another session
+ * [HHH-924] - Removed ErrorCodeConverters
+ * [HHH-946] - QuerySyntaxException might not be serializable
+
+** Improvement
+ * [HHH-898] - OracleDialect UTF8 varchar2
+ * [HHH-909] - Unquoted primary key in IncrementGenerator
+
+
+Changes in version 3.1 beta 2 (16.08.2005)
+-------------------------------------------
+** Bug
+ * [HHH-477] - Boolean discriminators generate invalid SQL for PostgreSQL dialect
+ * [HHH-480] - SchemaExportTask ignores some properties not defined in hibernate.properties
+ * [HHH-615] - SchemaExport outputFile ignores ant's basedir
+ * [HHH-770] - hql query execution generates invalid SQL
+ * [HHH-779] - Assertion failure occured with Hibernate 3 saving objects
+ * [HHH-781] - SimpleExpression ignorecase regression
+ * [HHH-799] - merge() and embedded composite identifiers
+ * [HHH-801] - subselect fetch and named parameters
+ * [HHH-802] - querying "mapped" composite identifiers
+ * [HHH-803] - no version increment from delayed collection adds
+ * [HHH-805] - Session.getStatistics().getEntityCount() throws UnsupportedOperationException
+ * [HHH-819] - Firebird CONCAT SQL function
+ * [HHH-821] - query by natural-id cache is not update when object is inserted or deleted
+ * [HHH-822] - <key-property> will actually pick up <type> tags if it were allowed by the DTD
+ * [HHH-825] - ReadWrite-Cache issues NullPointerException after modification of an array
+ * [HHH-839] - Session.refresh not working for custom 'Load' SQL
+ * [HHH-849] - Cartesian product + implicit joins
+ * [HHH-854] - Class with mapped composite id can't have subclasses
+ * [HHH-858] - Autocommit status inconsistent in connections created by DriverManagerConnectionProvider
+ * [HHH-863] - Hibernate generates "notExists" instead of "not exists"
+ * [HHH-868] - Missing parens after / or -
+
+** New Feature
+ * [HHH-35] - add attribute haltonerror to schemaexport Ant task
+ * [HHH-182] - Mimer SQL Dialect for Hibernate 3
+ * [HHH-704] - Statistics for optimistic lock failures
+ * [HHH-725] - Allow hooks into all executed sql by a session
+ * [HHH-783] - collection lazy="extra"
+ * [HHH-818] - Optimisitc locking using database current timestamp
+ * [HHH-828] - session.getTransaction()
+ * [HHH-829] - <cache include="all|non-lazy" ... />
+ * [HHH-831] - allow database generated property values
+ * [HHH-832] - allow database generated property values for versioning
+ * [HHH-838] - Transaction.setTimeout()
+ * [HHH-840] - allow definition of "auxiliary" database objects in mapping
+ * [HHH-846] - Add Intializable interface for events
+ * [HHH-848] - Validate mappings against JDBC metadata
+ * [HHH-859] - post-commit events
+
+** Improvement
+ * [HHH-133] - schemaexport task: provide independent drop/create output
+ * [HHH-135] - parameterized types can't be used on key-property or ir (possible others)
+ * [HHH-552] - NoopAccessor for HQL-only properties
+ * [HHH-680] - Easier support for doing UserCollectionType's
+ * [HHH-686] - Final classes and classes with private null ctors cause unhelpful NullPointerException
+ * [HHH-754] - Allow HQL DML for implicit polymorphism
+ * [HHH-782] - Avoid unnecessary updates when component property is update='false' but modified
+ * [HHH-786] - Improve lazy options for <one-to-one>
+ * [HHH-791] - Use cascade styles when fetching entities in refresh() and merge()
+ * [HHH-815] - Confusing use of the term "dereference"
+ * [HHH-830] - Improvements to caching lazy properties
+
+** Patch
+ * [HHH-378] - Better LockMode.UPGRADE for DB2 UDB v8.2
+ * [HHH-430] - Improved SizeExpression with greater, lesser, not equals, etc. capabilities
+ * [HHH-735] - SchemaUpdate reads table metadata from wrong schema
+ * [HHH-780] - org.hibernate.proxy.BasicLazyInitializer reflection hotspot
+ * [HHH-864] - Use QUERY_CACHE for sessions with filters to improve performance
+
+
+Changes in version 3.1 beta 1 (21.07.2005)
+-------------------------------------------
+
+** Bug
+ * [HHH-145] - union-subclass and oracle 8i
+ * [HHH-374] - EJB3 example delete query doesn't work in Hibernate.
+ * [HHH-447] - EHCache integration prevents multiple session factories
+ * [HHH-488] - JACCListeners are not working at all
+ * [HHH-564] - missing commas for implicit joins
+ * [HHH-577] - joins within subqueries on dbs supporting ansi-joins result in extraneous commas
+ * [HHH-592] - cast() function doesn't know its returned Hibernate type
+ * [HHH-639] - CGLIB instrumentation of subclasses
+ * [HHH-658] - Bug in Alias Name Generation
+ * [HHH-671] - Firebird support of sequences/generators
+ * [HHH-679] - setLockMode(LockMode.UPGRADE_NOWAIT) does not translate to correct SQL on Oracle
+ * [HHH-688] - Bad implementation in org.hibernate.type.CustomType.stringToObject
+ * [HHH-691] - generated column alias is incorrect if there is a prior relationship and the table column names are similar to the table name
+ * [HHH-694] - NPE when accessing the SLCache stats with TreeCache
+ * [HHH-698] - Exception on EG , trying to change immutable id (natural-id)
+ * [HHH-699] - Incorrect Tablename genetaion when using MySQL Dialect and no Schema definition
+ * [HHH-708] - Restrictions.in could not be used properly on composite-ids
+ * [HHH-709] - ArrayType.replaceElements fails if original.length != target.length
+ * [HHH-718] - HQL "fetch all properties" not working for column level lazy props
+ * [HHH-726] - ConstraintViolationException with primitive collection
+ * [HHH-727] - java.lang.StackOverflowError when cascade="true" on both sides of bidirectional one-to-one association using FK
+ * [HHH-734] - HQL incorrectly parses certain query strings
+ * [HHH-736] - Use of sql functions containing space not supported in filter conditions
+ * [HHH-738] - formula property with select-before-update
+ * [HHH-747] - Order.toSQLString generates incorrect statement
+ * [HHH-748] - component dereferencing in subquery from clauses
+ * [HHH-752] - Typo in 8.5.3 bidirectional one-to-one jjoin table example
+ * [HHH-757] - NullPointerException when using BigInteger in a query
+
+** New Feature
+ * [HHH-595] - HQL insert select
+ * [HHH-597] - Named XML resultsetmappings
+ * [HHH-696] - handle discriminators on HQL insert
+ * [HHH-697] - allow bumping versions in HQL update
+ * [HHH-716] - handle version columns in bulk inserts
+ * [HHH-723] - Need to be able to pass in javax.sql.DataSource in SF creation
+ * [HHH-739] - Order.ignoreCase()
+ * [HHH-741] - select clause subselects
+ * [HHH-742] - Stateless session
+ * [HHH-744] - collection fetching in scroll() via "break processing"
+ * [HHH-768] - <many-to-many property-ref=".."/>
+
+** Improvement
+ * [HHH-14] - Add Session.delete(String entityName, Object entity)
+ * [HHH-295] - cleanup and expose the Tuplizers
+ * [HHH-352] - HQL bulk and cache
+ * [HHH-689] - exclude parens for components outside where-clause
+ * [HHH-743] - {coll.key}, {coll.index}, {coll.element}, etc
+ * [HHH-745] - EJB3 composite PK style
+ * [HHH-749] - Cascade merge() and unidirectional one-to-many
+ * [HHH-750] - use attribute name other than 'type' in dynamic-maps
+ * [HHH-753] - Replace antlr System.exit with QueryException
+ * [HHH-769] - property-ref="foo.bar" to a component property
+ * [HHH-772] - null in maps are handled inconsistently
+ * [TODO-18] - optimistic-lock="all|dirty" with components
+
+
+Changes in version 3.1 alpha 1 (24.06.2005)
+------------------------------------
+** Bug
+ * [HHH-204] - Wrong/uncommon log name in class ...hql ast ErrorCounter
+ * [HHH-241] - HQL lexer doesn't support unicode quoted strings
+ * [HHH-354] - property named "full" breaks HQL queries
+ * [HHH-493] - WARNING: Keyword 'member' is being intepreted as an ident
+ * [HHH-538] - length() function does not work in SQLServerDialect
+ * [HHH-539] - ClassCastException on mapping a property with a formula in a set of composite elements
+ * [HHH-540] - Mapping a one-to-many collection with a non-null foreign key within a component fails on save
+ * [HHH-547] - Cannot commit using UserCollectionType and debug logging
+ * [HHH-548] - many-to-many faulty delete optimization when filter in use
+ * [HHH-554] - Hibernate 3 HQL to SQL FROM Clause Comma Generation Problem
+ * [HHH-558] - HQL doesn't support multi-byte character in class name and property names
+ * [HHH-559] - quoted multi-byte character in HQL is translated into weird character in SQL.
+ * [HHH-565] - delete-orphan generating AssertionFailure
+ * [HHH-566] - The result is not correct in 'createQuery("select new Foor(x,x) from Foo").scroll()'
+ * [HHH-570] - size operator fails on a many to many in HQL
+ * [HHH-571] - JDK 1.3 Compatibility Issue
+ * [HHH-573] - error when merging entity graph has cascade level>2
+ * [HHH-575] - org.hibernate.cache.FilterKey is not Serializable
+ * [HHH-589] - parameterized expression inside function
+ * [HHH-594] - order-by mapping for collections overrides order by in HQL
+ * [HHH-601] - New temporary table feature assumes all persisters are ready
+ * [HHH-614] - SchemaUpdate broken in DB2/400
+ * [HHH-622] - Spelling mistake 'intepreted' in org.hibernate.hql.PARSER warning
+ * [HHH-642] - criterias with projection
+ * [HHH-650] - FilterImpl is Serializable yet FilterDefinition is not
+ * [HHH-657] - Date parse exception using EntityMode.DOM4J
+ * [HHH-666] - JTAHelper.isInProgress( txn.getStatus()) throws NPE when txn null
+
+** New Feature
+ * [HHH-620] - Extra join conditions in HQL
+ * [HHH-640] - short-circuit dirty checking for instrumented classes
+ * [HHH-643] - support mutable="false" for collections
+ * [HHH-645] - Session.setReadOnly()
+ * [HHH-549] - portable to_char() function
+ * [HHH-576] - Hook to pre-process generated select strings in the Dialect
+ * [HHH-662] - Add support for definition of functional composite key ("properties") in joined subclass
+
+** Improvement
+ * [HHH-46] - Allow access to properties that are not joined
+ * [HHH-261] - Stored procedure support for SQLServer dialects
+ * [HHH-351] - multi-table bulk operations
+ * [HHH-574] - improve in naming named-query
+ * [HHH-596] - Auto-detect {..} in native SQL queries
+ * [HHH-641] - create constraints for many-to-one property-ref
+ * [HHH-501] - warn when a final method is tried to be proxied
+ * [HHH-525] - cglib related startup performance
+ * [HHH-557] - Helpful error message for non Serializable classes with a composite-id
+ * [HHH-586] - check immutable natural-ids
+ * [HHH-609] - Adds substr to PostgreSQL dialect
+ * [HHH-618] - documentation bugs
+
+** Patch
+ * [HHH-224] - JDataStore Dialect and updated Testfiles
+ * [HHH-366] - InformixDialect SQLExceptionConverter
+ * [HHH-536] - ImprovedNamingStrategy modifies capitalized column names inappropriately
+ * [HHH-632] - Informix Dialect missing from automatic dialect discovery
+ * [HHH-4] - CachedFile bugfix + configuration + autodetect resource as file
+
+
+Changes in version 3.0.5 (25.5.2005)
+------------------------------------
+
+** Bug
+ * [HHH-516] - Interceptor.onFlushDirty() sometimes not called
+ * [HHH-517] - getDatabaseMajorVersion() not available in JDK 1.3
+ * [HHH-518] - SQL parser does not recognize all whitespace
+ * [HHH-519] - broken SQL when traversing many-to-many to joined <subselect>
+ * [HHH-529] - Bug in merge()
+
+** New Feature
+ * added <natural-id> mapping
+ * [HHH-533] - allow unique-key on <property> and <many-to-one>
+ * [HHH-534] - efficient cache by natural key
+ * support for <comment> on MySQL
+
+** Improvement
+ * [HHH-526] - log "Aggressively releasing JDBC Connection" as DEBUG instead of INFO
+ * various logging improvements
+
+
+Changes in version 3.0.4 (23.5.2005)
+------------------------------------
+
+** Bug
+ * [HHH-452] - UnsavedValueFactory.instantiate does not wrap the Exception it catches
+ * [HHH-456] - Session still holds references to entities after close()
+ * [HHH-457] - Log info for structured second-level cache entries is incorrect
+ * [HHH-466] - Made default for MS SQL dialect definition more flexible
+ * [HHH-473] - Formula can't contain SQL cast keyword
+ * [HHH-484] - Order-by not applied to collections fetched by OuterJoinLoader
+ * [HHH-487] - Possible empty union in UnionSubclassEntityPersister
+ * [HHH-505] - Possible NullPointerException in BigIntegerType
+ * [HHH-507] - Cached List does not show additions
+ * Fixed bugs in subselect fetching
+
+** New Feature
+ * [HHH-455] - Obtain non-intercepted Session by passing an EmptyInterceptor
+ * [HHH-467] - HQL: support for case when then else end IN select clause
+ * [HHH-485] - Support multiple collection join fetches (attention: Cartesian product) in native SQL queries
+ * Added SessionStatistics metric interface
+ * Added support for table and column level <comment> blocks
+ * Added Simplified Chinese translation of reference documentation (Xiaogang Cao)
+
+** Improvement
+ * Any query may now join fetch >1 collection role (attention: Cartesian product)
+ * [HHH-454] - Add 2292 integrityViolationCode to Oracle9Dialect
+ * [HHH-503] - Implemented ViolatedConstraintNameExtracter for HSQLDialect (Frank Grimes)
+
+
+Changes in version 3.0.3 (8.5.2005)
+-----------------------------------
+* fixed bug in HQL for composite key classes which have a property named the same as the owning entity's id property
+* replaced 'connection.aggressive_release' with 'hibernate.connection.release_mode'
+* added ConnectionReleaseMode
+* added eager fetch for any associations with fetch=join, even after a HQL query, or cache retrieval (EJB3)
+* added replicate() isUpdate flag to OnReplicateVisitor, useful for native ids
+* fixed ParameterizedTypes order of initialization
+* fixed bug in DB2Dialect
+* fixed EntityMode.DOM4J creation of duplicate <set> output
+* fixed JDBCException error code handling
+* fixed Criteria Restrictions.isEmpty()/isNotEmpty() when collection is mapped to superclass
+* fixed HQL indexed collections access with no alias
+* fixed HQL aggregate functions on components when "id" property is used
+* fixed issue with non-cascading refresh to collections
+* fixed query-timeout not being applied to bulk HQL (Stephan Fudeus)
+* fixed pessimistic locking with Firebird (Yuichi Sugimura)
+* updated Ant 1.6.3
+* improved validation of sql queries, throw QueryException if addEntity() nor addScalar() was called
+* added automatic dialect detection if no dialect is configured
+* added new tutorial (Michael Gloegl, Christian Bauer)
+
+
+Changes in version 3.0.2 (27.4.2005)
+------------------------------------
+* fixed union operations on PostgreSQL
+* fixed HQL concat() function for Oracle dialect
+* fixed auto-close/auto-flush during getCurrentSession() processing
+* fixed ClassCastException with EntityMode.DOM4J
+* fixed HQL dynamic instantiation with iterate()
+* fixed HQL bug with missing parantheses and implicit joins
+* fixed bug were Interceptor.getEntity() wasn't called if in cache
+* fixed bug in merge() of sorted sets
+* fixed bug in EntityMode.DOM4J with non-lazy embedded many-to-ones
+* fixed Criteria/Projection ordering bug
+* fixed HQL referencing component attribute
+* fixed column duplication detection for components
+* fixed eager fetching for many-to-many associations
+* fixed stack overflow with auto_close_session and aggressive_release and unclosed ScrollableResults/HibernateIterator
+* fixed bug in HQL parser regarding naked property refs which reference component properties
+* fixed bug with eager fetched arrays not being loaded
+* fixed bug in filter against joined-subclass
+* improved CacheMode.GET/IGNORE, disabled cache put
+* improved HQL support for standard SQL functions, including coalesce() and nullif()
+* improved filtering of many-to-many associations
+* added HQL support for cast(x as type) if SQL database supports it
+* added increment id generation for union-subclass
+* added ConnectionProvider.supportsAggressiveRelease() for managed environments
+* added support for caching of queries if filter is enabled
+* added PreparedStatement count to Statistics
+* added transactional/nontransactional read()/get() to Cache API
+* added quotation of schema names
+* added Distinct to Projection API
+* added config parameter 'connection.aggressive_release'
+
+Changes in version 3.0.1 (18.4.2005)
+------------------------------------
+* added HQL tuple constructor/comparison feature
+* added HQL "fetch all properties" override if instrumentation is used for lazy loading
+* added HQL projection feature, return Lists instead of arrays for projection
+* added HQL projection feature, return Maps with user-defined HQL SELECT aliases as keys
+* added HQL support for expressions in aggregation functions
+* added new IntegrityViolationException to MySQL dialect
+* added value mapping type 'big_integer'
+* added not-found="ignore|exception" switch for legacy associations (i.e. broken database integrity)
+* added fully automatic Session scoping in JTA environments with sf.getCurrentSession()
+* fixed bug in DTD that wouldn't allow union-subclass in separate file
+* fixed a MS SQL Server case sensitivity issue with native SQL queries
+* fixed a minor bug in subselect fetching
+* fixed case sensitivity in HQL functions
+* fixed a bug with listener assignment for save() operation (Matthew Inger)
+* fixed return-property in named SQL queries to work with all identifier names
+* fixed TransactionManager lookup (again) for WAS 6.0
+* fixed a bug with HQL batch delete and MS SQL Server
+* fixed session not getting closed with auto_close when rollback occured
+* improved concatentation handling in AST parser
+* updated dom4j to avoid memory leak in old version
+* updated C3P0
+
+
+Changes in version 3.0 (31.3.2005)
+----------------------------------
+* added support for autoflush/autoclose to HibernateServiceMBean
+* fixed initialization/session association detection problem of collections
+* fixed creation of FK constraints to union superclass table
+* fixed bug where union-subclass table did not get a PK constraint
+* added a separate log category for HQL parser warnings and errors
+* fixed bulk delete operation on MS SQL Server
+* added support for proxying protected methods (Juozas)
+* added support for unicode quoted strings in new HQL parser
+* fixed implied joins in subselect WHERE clause in new HQL parser
+* added SQLServer7Dialect to handle differences in functions
+* added support for JNDI-bound cache instances, future use for JBoss Cache
+* added scale attribute to column mappings for numeric precision control
+* added fetch=subselect for collections
+* added support for bulk update/delete against discriminator-based inheritence hierarchies
+* added the ability to use naked property refs in HQL (required in update/delete statements)
+* updated CGLIB 2.1.0
+* fixed NPE at BasicEntityPersister.getPropertyIndex (Todd Nine)
+* fixed issue with entity-name and subclasses (Sverker Abrahamsson)
+* fixed issue with correlated subqueries in new HQL parser
+* fixed a problem with native SQL query mapping and embedded composite identifiers
+* improved mapping binding, allowing unordered extends for pure entity-name hiearchies
+* fixed NPE for delete() with deprecated Lifecycle interface
+* fixed a problem with serial joins ending in component value in new HQL parser
+* fixed inner join/subselect precedence problem in new HQL parser
+* fixed indices() function in new HQL parser
+* fixed a bug in InformixDialect, now correct LIMIT clause
+* fixed a bug in idbag.remove() (Sebastien Cesbron)
+* fixed a conflict on OracleDialect between setMaxResult and LockMode.UPGRADE
+* fixed XML configuration file issue with SchemaExport
+* fixed an ArrayIndexOutOfBounds problem
+* renamed executeUpate() to executeUpdate()
+* fixed batch loading for property-ref entities
+* fixed loading from cache of <key property-ref> collection owner
+* fixed minor bug in SQL exception reporting
+* fixed dynamic-component cannot be bound to XML
+* fixed querying component with formula property
+* fixed incorrect table alias for order-by on many-to-many
+* fixed a bug for unidirectional one-to-many with moving child objects
+* fixed a bug with union-subclasses and persister creation
+* fixed a HQL concatenation problem on MySQL
+* fixed a bug where an unnecessary exception was thrown for a property-ref to a superclass property
+* fixed minor dtd bug
+* fixed new bug in Clob/Blob support
+* fixed issue with INDEX_OP and subclass joins on theta-join dialects
+* fixed some minor issues in query cache regions, including HB-1449
+* fixed superflous import and regression bug in verifyparameters
+* fixed two bugs in select id generator (Malcolm Green)
+* fixed increment generator for union-subclass mappings
+* updated JBoss Cache to 1.2.1alpha, fixing locking issues
+* made stat classes serializable
+* fixed merge(), now ignores blob and clob fields
+* added support/dialect for TimesTen
+* improved algorithm for batch fetching, more aggressive
+* improved toStrings()s for Statistics objects (Ryan Lynch)
+* renamed <result-*> to <return-*> for externalized SQL query mapping
+* renamed Session.openSession() for EntityMode to Session.getSession()
+* added support for CASE in HQL
+* fixed bug with filters and polymorphic queries
+* fixed import ordering problem of super/subclass mappings
+* switched to patched ANTLR 2.7.5, now using context classloader before doing class.forname
+* TableHiloGenerator now falls back to TableGenerator properly with max_lo < 2 (Emmanuel Bernard)
+* better transaction handling of TableGenerator in a JTA environment (Emmanuel Bernard)
+* removed hard coded log4j dependency (Emmanuel Bernard)
+* added support for stored procedure in named queries (Max Andersen)
+* added <property-result> to named SQL queries to allow users to use sql without {}-markup
+* added multi-column property support to native SQL mapping
+
+Changes in version 3.0rc1 (28.2.2005)
+----------------------------------
+* introduced EntityModes, and XML mapping preview
+* several minor dialect improvements
+* fixed a problem where filters were not applied to subclasses
+* fixed a problem where InstrumentTask would fail if applied to already-instrumented classes
+* fixed many problems with new parser and made it the default (thanks again to Joshua for the new parser)
+* implemented bulk update/delete queries for the new parser
+* fixed a minor bug in the classic query parser
+* renamed create() to persist() as per EJB3edr2
+
+Changes in version 3.0 beta 4 (11.2.2005)
+-----------------------------------------
+* support unidirection one-to-many with a not-null foreign key
+* support formulas for index and element of collections
+* support one-to-ones mapped to formulas
+* fixed a bug in proxying methods that return "this"
+* optimized proxies for embededded composite id classes
+* fixed a bug affecting <key-many-to-one>
+* fixed a bug caching newly inserted objects
+* introduced DetachedCriteria
+* support subselects in Criteria queries
+* miscellaneous Criteria API enhancements
+* fixed a problem where hibernate.max_fetch_depth applied to eager fetching via setFetchMode()
+* use inner joins for join fetching not-null fk associations
+* support unique="true" in <component> and <properties> mappings
+* union-subclass hierarchies may own collections (dtd bug)
+* added guid support for Oracle
+* new mechanism for auto-detecting unsaved-value
+* pass state array in delete events
+* improved implementation of hibernate.auto_close_session and hibernate.close_before_completion
+* fixed a bug where components with only collections would be incorrectly nullified
+* fixed a bug where criteria queries with projection could not be cached
+* fixed a problem where duplicate column name aliases could be generated
+
+Changes in version 3.0 beta 3 (30.1.2005)
+------------------------------------------
+* Major rework of Criteria queries, support for projection, grouping, aggregation, ordering by any attribute
+* various improvements to new HQL parser (Joshua Davis)
+* fixed a bug where <join fetch="select"> was broken for subclasses with duplicated property names
+* fixed problems with long types in Oracle DDL generation
+* added EnhancedUserType, UserCollectionType, UserVersionType
+* added CacheMode
+* fixed minor performance problem where cascade delete could add objects to second-level cache
+* added hibernate.default_batch_fetch_size
+* added hibernate.cache.use_structured_entries
+* different classes and collection roles may now share a cache region
+* don't include discriminators for abstract classes in generated SQL
+* it is no longer truly necessary for composite identifier classes to implement equals()/hashCode() (but still recommended)
+* workaround for bug in MySQL InnoDB with self-referential foreign keys
+* added lazy="true" to many-to-one and one-to-one mappings (requires bytecode instrumentation)
+
+Changes in version 3.0 beta 2 (24.1.2005)
+------------------------------------------
+* added LockAcquisitionErrorCodes to MySQL dialect (Jesse Barnum, Emmanuel Bernard)
+* added MultipleHiLoPerTableGenerator, one hi value per row/per table (compliant with EJB3)
+* added a generator handling multiple hi values per table (Emmanuel Bernard)
+* added events for pre/post SQL operation interception
+* added experimental support for JACC-aware configuration and events
+* added full support for implicit polymorphism in Criteria queries
+* added support annotated classes through XML configuration (Emmanuel Bernard)
+* added support for WebSphere's weird TxManagerLookup
+* added support for filters with dynamic-class mappings
+* added support for lists of parameters in filters
+* added support for scalar queries in createSQLQuery (Michael Gloegl)
+* added support for scalar results in native SQL queries (Michael Gloegl)
+* fixed SchemaExport/SchemaUpdate, now respect default_schema and default_catalog (Michael Gloegl)
+* fixed a bug in one-to-one mapping with property-ref
+* fixed a bug in the query cache lookup routine
+* fixed compilation problems on IBM JDK 1.4. and JDK 1.3.1
+* fixed custom SQL for loading when using composite identifiers
+* fixed exception thrown from optimistic locking failures
+* fixed support for limit queries (select first ?) in Informix
+* improved SchemaExport/Update, now respect default_schema and default_catalog
+* improved dialect handling, throw an exception if no dialect has been set
+* improved loading of mappings, no ordering of super/subclasses required anymore
+* improved statistics for second-level cache
+* improved table generators for hi/lo, can now be used in a JTA environment (Emmanuel Bernard)
+* query engine: added support for 'trim([leading | trailing | both] [expression from] expression)'
+* query engine: added support for DISTINCT and ALL
+* query engine: added support for FETCH
+* query engine: added support for HAVING count()
+* query engine: added support for HQL NOT IN and EJBQL '[NOT] MEMBER OF'
+* query engine: added support for ORDER BY COUNT(*)
+* query engine: added support for collections of scalar values
+* query engine: added support for literals in constructor select expressions.
+* query engine: added support for select elements(..) from Foo f
+* query engine: added support for template functions in the SELECT clause
+* query engine: fixed NOT LIKE
+* query engine: introduced EMPTY and added it to constant (support for IS [NOT] EMPTY)
+* updated dom4j, OSCache, EHCache, JBoss Cache, Xerces, Xalan, and Log4j
+* associated class where filter now applies to <one-to-one property-ref>
+
+Changes in version 3.0 beta 1 (21.12.2004)
+------------------------------------------
+* reimplemented HQL using an ANTLR-based AST parser (Joshua Davis)
+* added class="select" id generator
+* added Query.setReadOnly()
+* added hibernate.order_updates
+* introduced cascade refresh
+* added typed JDBC exceptions (Steve Ebersole)
+* improved lifecycle for CacheProviders (Steve Ebersole)
+* added Expression.isEmpty()
+* fixed some minor mapping DTD bugs (Ben Sommerville)
+* fixed auto-commit mode for SchemaUpdate
+* added default-lazy to <hibernate-mapping>, which defaults to true!
+* added fetch="join|select" and deprecated outer-join attribute
+* fixed a bug where <custom-insert> was not used for entities with "identity" id generation
+* fixed some problems with dynamic-class
+* added property-level optimistic-lock attribute, to allow an unchecked property
+* cascade lock() now cascades with LockMode.NONE
+* fixed some bugs in filter handling (Steve Ebersole)
+* added hibernate.transaction.flush_before_completion and hibernate.transaction.auto_flush_session
+* added JSR-220 compliant create() and merge() operations
+* cascade attribute is now multi-valued, with values save-update,create,merge,delete,delete-orphan,lock,evict,replicate,all-delete-orphan
+* index and unique-key attributes may now be multi-valued
+* introduced unsaved-value="undefined", the default for "assigned" ids and <composite-id>, which forces Hibernate to hit the db
+* primitive typed <id> property mappings now default to unsaved-value="0"
+* added ScrollMode
+* added dialect for Derby (Simon Johnston)
+* added MySQLMyISAMDialect and MySQLInnoDBDialect
+* added precision and scale mapping attributes, for numeric types in DDL
+* fixed a problem with duplicate column mappings on Sybase
+* read-write cache now uses version numbers to ensure consistency with database, if available
+* native SQL queries may now fetch a collection role (Steve Ebersole)
+* added sequential-select, optional and inverse attributes to <join/>
+* added <properties> element, which can be the target of a property-ref
+* fixed a bug relating to composite property-refs
+* Hibernate now much more robust if user does not implement equals()/hashCode() on id and unique key classes
+* enabled batch deletes for versioned data
+* fixed a minor bug in Session.close()
+* removed uuid.string and renamed uuid.hex to plain uuid
+* workaround for a MySQL bug in SchemaUpdate
+* added JDBCException.getSQL() and made various improvements to exception flow
+* createSQLQuery() now fully supports components
+* fixed a bug in SQL generation for <joined-subclass> mappings
+* fixed a bug where filter and query parameters could be bound in the wrong order (Steve Ebersole)
+* fixed a problem where quantifiers could not appear in SQL fragments
+* fixed a bug with dynamic components
+* fixed a bug where Dialect default properties overrode user-specified properties (Ben Sommerville)
+* fixed a bug where duplicate column name in a joined table caused an exception
+* implemented two-phase load for dynamic components
+* fixed a bug where cancelQuery() canceled a re-pooled statement
+* deleted collections are now removed from session-level cache
+* fixed a bug in LocaleType (Steve Ebersole)
+* use "with rr" to obtain UPGRADE locks in DB2
+* package attribute now significant for extends
+* fixed a minor problem with Hibernate Clobs and Blobs
+* extends attribute does no longer require specific ordering of mapping files
+
+Changes in version 3.0 alpha (23.8.2004)
+----------------------------------------
+* package rename net.sf.hibernate -> org.hibernate
+* checked exceptions are now runtime exceptions
+* some session methods deprecated and moved to org.hibernate.classic.Session
+* removed various deprecated functionality
+* added Filter API and mappings, for temporal, regional and permissioned data (Steve Ebersole, Gavin King)
+* support cascade delete via ON DELETE CASCADE constraint
+* added extra attributes to named query definition
+* added hibernate.use_identifier_rollback
+* added subselect mappings
+* added lazy="true" to property mappings
+* added <join/> for multitable mappings
+* added <union-subclass/> for table-per-concrete-class strategy
+* added Statistics API and JMX MBean (Gavin King, Emmanuel Bernard)
+* introduced new event-driven design (Steve Ebersole)
+* support for faster startup with Configuration.addCachableFile() (Joris Verschoor, Max Andersen)
+* mask connection password for log level greater of equals to info (Joris Verschoor, Emmanuel Bernard)
+* add check of named queries when building SessionFactory (Joris Verschoor, Emmanuel Bernard)
+* added custom EntityResolver setting capability (Emmanuel Ligne, Emmanuel Bernard)
+* PropertyValueException for null values in not-null properties of components (Emmanuel Bernard)
+* enhanced support for single- and no-argument sql-functions in HQL select clause (Michael Gloegl)
+* Added catalog element, to enable table names like catalog.schema.table (Michael Gloegl)
+* Added <sql-insert>, <sql-update> and <sql-delete> support (Max Andersen)
+* Support callable statements (stored procedures/functions) via callable="true" on custom sql (Max Andersen)
+* Added support for type parameters and typedefs (Michael Gloegl)
+* Added support for JDBC escape sequences in createSQLQuery (Max Andersen)
+* Added statistics per SessionFactory (Gavin King, Emmanuel Bernard)
+* Added a StatisticsService MBean for JMX publucation (Emmanuel Bernard)
+* support for updates via rownum in Oracle
+* fixed problems with SchemaUpdate
+* support for <column formula="..."/>
+* added hibernate.use_sql_comments
+* added property-ref to collection <key/>
+* fixed performance problems with <one-to-one property-ref=.../>
+* enhanced UserType with new methods assemble()/disassemble()
+* better algorithm for batch fetch batch sizes
+* added <dynamic-class>
+* added entity-name concept, and session methods save(entityName, object), update(entityName, object), etc
+* added framework in proxy package
+* native SQL queries may now fetch a collection role
+* added <loader/> for class and collection mappings
+* added getEntity() and getEntityName() to Interceptor
+* formula-based discriminators and association mappings
+* added "guid" id generation strategy
+* various improvements to dialects
+* <discriminator force="true"/> now acts as a filter on collections
+* where filters now apply in the on clause in an outer join
+* added hibernate.jdbc.factory_class to select a custom batcher
+* session now uses entity name + id to enforce uniqueness, instead of table name + id
+
+Changes in version 2.1.6 (9.8.2004)
+------------------------------------
+* fixed Quickstart/readme.txt instructions
+* fixed DB2/400 identity column support
+* fixed the scroll() query method
+* fixed exotic classloader problems with CGLIB
+* added insert="false" for discriminator columns which are part of a composite identifier
+* added several new configuration settings to JMX HibernateService
+* added new instantiate() method to SessionFactory.getClassMetadata()
+* improved the HSQL DB dialect with features from new version
+* added hibernate.jdbc.batch_versioned_data (Steve Ebersole)
+
+Changes in version 2.1.4 (2.6.2004)
+------------------------------------
+* improved Session serialization support by adding ability to serialize unflushed sessions (Steve Ebersole)
+* fixed Session.clear() functionality to clear the internal nonExists cache (Steve Ebersole)
+* much better implementation of scroll() (Steve Ebersole)
+* support "select new ..." for iterate() and scroll() (Steve Ebersole)
+* added support for multi-parameter SQL functions (Steve Ebersole)
+* fixed hbm2ddl generating infinite indexes on MySQL (Michael Gloegl)
+* fixed alias precedence in HQL queries, function names are second (Steve Ebersole)
+* added "transactional" as allowed cache concurrency strategy in XML configuration file
+* improved System.getProperties() with security exception warning in secure environments
+* improved Proxool integration, better property handling
+* fixed problem with use of getDefinedMethod() in secure environments (Ken Arnold)
+* fixed bug in createSQLQuery() which prohibited multiple aliases for the same entity (Max Andersen)
+* fixed query cache misses when using named bind parameters (Michael Greer)
+* recognize "left" and "right as keywords in SQL fragments
+* recognize SQL quoted identifiers in SQL fragments
+* improved identity handling on SQL Server by using scope_identity() for update counts (Arthur Fitt)
+* added DB2390Dialect for DB2/390 databases (Kristoffer Dyrkorn)
+* fixed a bug in toArray() of identifier bag collections (Khachchou Mohammed)
+* fixed a problem with DDL generation for serial columns in Informix
+* fixed a problem with DDL generation for timestamp columns in Informix (Michael Schmidt)
+* fixed a NPE that occurred calling saveOrUpdateCopy() for components
+* fixed a bug with replicate() and uninitialized collections
+* fixed a bug caching one-to-one associations
+* fixed eviction from named query cache regions
+
+Changes in version 2.1.3 (25.4.2004)
+-----------------------------------
+* added SELECT-clause SQL function support to main Dialects
+* fixed a problem where some unnecessary selects where issued for optional one-to-one associations
+* fixed a bug in SQL generation for criteria queries with multiple one-to-many joins
+* deprecated everything related to PersistentEnum
+* fixed an NPE that occurred when using <one-to-one property-ref> with composite ids
+* fixed a problem with JCA adaptor on WebLogic (Michael Gloegl)
+* improved behavior when removing elements from <idbag>s
+* fixed a bug in getGeneratedKeys() support (Michael Gloegl, Kevin Day)
+* fixed a bug when using Criteria queries with collections of joined-subclasses
+* fixed an NPE that occurred when calling comparator() on a lazy sorted set (Attila Szegedi)
+* fixed a bug when using setMaxResults() with native SQL queries in some Dialects
+* validate that composite id classes override hashCode() (Adrien)
+* fixed some minor problems with saveOrUpdateCopy()
+* fixed some problems in OSCache provider
+* fixed an NPE that occurred when calling a lazy collection after evicting from session
+* fixed an NPE that occurred when select-before-update is used with unversioned data (Patrick Peralta)
+* fixed a bug where dynamic-components could not be queried (Massimo Ferrari)
+* SQL formula parser now recognizes all Dialect-specific SQL functions (Anthony Patricio)
+* fixed a problem where SQL CASE statements could not appear in SQL formulas
+* fixed a problem where subselects with joins could not appear in SQL formulas
+* C3P0 and Proxool pools now cleaned up after SessionFactory.close()
+* fixed a bug where dirty checking of mutable properties was broken after lock()
+* fixed a minor bug where orphan delete was broken for newly saved instances
+* added Query.setFetchSize() and Criteria.setFetchSize()
+* PreparedStatement pooling in DBCPConnectionProvider can now be disabled (Emmanuel Bernard)
+* Query.setProperties(Object) now detects array and collection valued properties and delegates to Query.setParameterList() (Max Andersen, Nick Heudecker)
+* lengths of positional parameters and types arrays are now validated
+* fixed an obscure problem where a PreparedStatement was not closed
+
+Changes in version 2.1.2 (4.2.2004)
+-----------------------------------
+* added Session.isDirty()
+* fixed a very obscure concurrency problem with read-write cache for inverse collections
+* deprecated Criteria.returnMaps() / Criteria.returnRootEntities() in favor of new ResultTransformer framework
+* don't cache objects with dynamic-update="true" or <joined-subclass> mappings immediately after insert/update
+* added version checking to saveOrUpdateCopy()
+* fixed constraint violations that occurred when mixing identity columns with other id generation strategies
+* added Sybase 11.9.2 dialect to support older versions of Sybase that do not support ANSI joins (Colm O' Flaherty)
+* added Informix9Dialect (Finn McCann and Max Andersen)
+* added DB2400Dialect (Peter DeGregorio)
+* fixed a problem where mapping validation failure was reported as duplicate import (Michael Gloegl)
+* fixed a problem with Expression.not() in MySQL (Michael Gloegl)
+* added support for ResultSet.getGeneratedKeys() (David Morris, John Kristian)
+* added check attribute to allow check constraints in DDL
+* implicit polymorphism for Criteria queries (Shorn Tolley)
+* use IF EXISTS for dropping hilo tables (Michael Gloegl)
+* better exception report if deleted object is resaved by cascade
+* support nested components in Example queries (Emmanuel Bernard)
+* fixed a minor problem with onDelete() callbacks
+* fixed an obscure problem with select-before-update
+* added SunONETransactionManagerLookup (Robert Davidson)
+* fixed a problem with replicate() and <joined-subclass> mappings
+* made setParameterList() accept empty lists and deny null values (Max Andersen)
+* validation check on query parameters now allows setParameter(x, null) (Max Andersen)
+* added default-access to DTD (Max Andersen)
+* made Query.setParameterList() accept empty lists and deny null values (Max Andersen)
+* allow Query.setParameter(x, null) (Max Andersen)
+* queries with "select new" now cacheable
+* throw meaningful exception when lazy initialization occurs on disconnected session
+* added default-access to <hibernate-mapping> (Max Andersen)
+* added -text support to SchemaUpdate (Max Andersen, Matt Hall)
+* fixed broken implementation of embedded composite keys with createSQLQuery() (Max Andersen)
+* added hibernate.cache.use_minimal_puts config property to reduce unnecessary second-level cache puts
+* optimized performance of orphan delete detection (Bertrand Renuart)
+* fixed problem where unnecessary UPDATE occurred after INSERT for versioned objects with collections
+* WebSphereTransactionManagerLookup for WAS 5.1 (Edina Pimp)
+* Criteria queries now cacheable (Mario Ivankovits)
+* fixed problem with ordered, paginated queries in DB2 (Tim Collins)
+* fixed a bug caching <idbag>s
+* lazy="true" collections are now lazy even when available in cache
+* fixed a problem with version unsaved-value="negative"
+* added hibernate.cache.region_prefix config property (William Drai)
+* fixed problem where configuration input streams were not closed (Rajesh Patel)
+
+Changes in version 2.1.1 (17.12.2003)
+-------------------------------------
+* added optional package attribute to <hibernate-mapping>
+* added <meta-value> element to allow simpler <any> mapping
+* native SQL queries are now cacheable - added <synchronize> element to allow correct result set expiry
+* fixed a bug in CGLIB2 integration (Chris Nockleberg)
+* added NamingStrategy
+* don't cache objects with formula properties immediately after insert/update
+* log generated SQL to a special category
+* type of property with access="field" may now be guessed using reflection
+
+Changes in version 2.1 final (12.12.2003)
+-----------------------------------------
+* fixed a problem with CGLIB2 proxies and method calls inside constructors
+* fixed a bug running SchemaExportTask with mappings in jar files (Tom McCune)
+* allow custom persister declaration for subclasses (Nick Johnson)
+* fixed handling of sequences in SchemaUpdate on Oracle (Andrew Delpha)
+* fixed a bug where Iterator did not handle single null values correctly
+* detect and throw exception in the case of a duplicate property mapping
+* don't auto-create indexes for collection foreign keys (roll back to 2.0.x)
+
+Changes in version 2.1 rc1 (29.11.2003)
+---------------------------------------
+* long identifier and discriminator column names are now safely aliased (Max Andersen)
+* cleaned up mapping package to allow applications to manipulate metamodel programmatically
+* fixed a recent bug where collection sort order was lost in second-level cache
+* formula attribute now supported for joined-subclass mappings
+* formula properties may now be used anywhere in queries
+* dialect-specific query pagination for SQL Server
+* fixed a bug where a long path expression ending in collection access by index missed some tables in SQL FROM clause
+* fixed a very ancient performance problem where null one-to-one associations caused n+1 selects
+* added Session.saveOrUpdateCopy()
+* fixed some bugs in Example queries
+* fixed some minor bugs in dialect-specific query pagination
+* immutable entity passed to update() is now lock()ed instead
+* reworked the semantics of nonstrict-read-write
+* JCS cache support now deprecated
+* fixed some obscure bugs in collection handling
+* migrated to CGLIB2 (thanks to Chris Nockleberg)
+* fixed bugs in replicate()
+* fixed a bug affecting joined-subclass mappings with dynamic-update=true
+* performance improvements to boolean type mappings (Bertrand Renuart)
+* integrated JBoss TreeCache clustered cache (thanks to Bela Ban and Ben Wang)
+* fixed a bug in new query parameter validation (Steve Ebersole)
+* fixed a bug where <any> mappings caused unnecessary ObjectDeletedException at flush time
+* fixed a bug where associations with property-ref mappings were not properly cached
+* throw PropertyValueException when not-null properties are null at flush time
+* added unsaved-value attribute to version property mapping (Emmanuel Bernard)
+* tolerate classnames containing $ (Steve Ebersole)
+
+Changes in version 2.1 beta 6 (5.11.2003)
+-----------------------------------------
+* added Session.cancelQuery()
+* improvements to transaction handling for failed commit (thanks to Juergen Hoeller)
+* added cascade="delete-orphan"
+* fixed an exception that occurred when a property was declared not-null="true" update="false" (thanks to John Kristian)
+* support multiple named query cache regions (Mikheil Kapanadze)
+* some improvements to collection reattachment
+* fixed a bad bug with adds to an uninitialized bag or list
+* removed support for <dynabean/> components
+* added <dynamic-component/> mapping for properties of type Map
+* fixed a bug where schema export generated index names that were too long for DB2
+* allow per-region expiry policies in OSCache (Matthias Bogaert)
+* fixed a stack overflow that could occur while initializing nonlazy collections
+* fixed a bug in case-insensitive like for Example queries
+* fixed a bug in ScrollableResults.setRowNumber() (Martin Priekopa)
+* improvements to the cache concurrency strategies
+
+Changes in version 2.1 beta 5 (30.10.2003)
+------------------------------------------
+* Support for custom CollectionPersister (Nick Johnson, Max Andersen)
+* Support for named SQL queries (Max Andersen)
+* duplicate named queries now throws MappingException instead of just logging warning (Max Andersen)
+* fixed problems with WebSphereTransactionManagerLookup (Ralf Taugerbeck, Daniel Bradby)
+* added support for custom collection persisters (thanks to Max Anderson, Nick Johnson)
+* fixed a performance problem during query compilation (Bulent Erdemir)
+* composite keys now supported in createSQLQuery() (Max Andersen)
+* fixed JCA adaptor to run in WebLogic (Daniel Bradby)
+* integrated SwarmCache (Jason Carreira)
+* integrated OSCache (Matthias Bogaert)
+* fixed an NPE that could occur with lists and orphan delete
+* allow nullable one-to-one with property-ref
+* improved usage of Dialect-specific limit SQL
+* fixed problem where non-lazy collections held by cached objects were not immediately initialized
+* fixed getReturnTypes() for native SQL queries (Max Andersen)
+* fixed problems with Criterions that applied to multi-column properties
+* check of rowcounts when JDBC batch updates enabled
+* added named SQL queries using <sql-query> element (Max Andersen)
+* added some extra validations so Hibernate fails earlier when user makes mistakes
+* allow lazy="true" as an alternative to proxy="ClassName"
+* removed dependency to commons-lang
+* SchemaExport now creates indexes for collection foreign key columns if specified by Dialect
+* fixed a bug parsing named parameters in setParameterList()
+* select new Foo(...) will now tolerate null values if the constructor accepts a wrapper type
+* fixed a problem detecting Proxool
+* added logging of persistent object states during flush()
+* allow "not null" as a discriminator value
+* added "parameters" config param to "sequence" generator (Matthias Bogaert)
+
+Changes in version 2.1 beta 4 (3.10.2003)
+-----------------------------------------
+* fixed a bug where <any> mappings did not handle proxies correctly
+* implemented new optimistic-lock strategies
+* fixed several bugs in Criteria query API
+* fixed a bug caching property-ref associations
+* improvements to XML Databinder (Ara Abrahamian)
+* added Session.replicate() and ReplicationMode
+* added ScrollableResults.setRowNumber() / ScrollableResults.getRowNumber()
+* added query cache and Query.setCacheable()
+* added Criteria.returnMaps()
+* fixed some problems with CGLIB proxies
+* fixed an NPE that occurred when a joined-subclass of a versioned entity defined only collections
+* added the access attribute, direct field access and the PropertyAccessor extension point
+* added MatchMode for use with Criteria queries (thanks to Michael Gloegl)
+* fixed a bug where some lazy="false" collections were not immediately initialized
+* fixed problem with WebSphere 5 TransactionManager
+* support schema attribute in MySQL, by using an underscore in the table name (Chris Hane)
+* now seperate Dialects for Interbase and Firebird (Reha Cenani, Max Andersen)
+* removed built-in PreparedStatement cache
+* added Session.getSessionFactory()
+* fixed problem with native SQL queries and Query.setProperties() (Max Andersen)
+* Query now fully validates parameters against the query string before passing them to JDBC (Max Andersen)
+* fixed an NPE in SessionFactory.close()
+* fixed an NPE that occurred when using <idbag>s
+* added SQL-level query results paging to DB2Dialect
+* "foreign" id generator now handles detached instances
+
+Changes in version 2.1 beta 3 (7.9.2003)
+----------------------------------------
+* added Example queries
+* fixed an exception that occurred at startup with <key-many-to-one> and <joined-subclass>
+* fixed a bug where composite-elements were not being updated if a property not in the equals() was changed
+* <parent> property of a composite-element may now be used in equals()
+* named parameters may now be used in HQL order by clause
+* null value of version property now indicates unsaved instance
+* added select-before-update attribute
+* two-phase loading now use for components
+* better implementation of equals()/hashCode() for proxies
+* added property-ref attribute to <many-to-one>
+* renamed result() to uniqueResult()
+* added Session.get()
+* added HashtableCacheProvider
+* JTA TransactionManager now used even when not using Hibernate Transaction API
+* always bypass process-level cache for LockMode.READ
+
+Changes in version 2.1 beta 2 (27.8.2003)
+-----------------------------------------
+* <subclass> and <joined-subclass> may now appear outside of a <class> element, by providing the extends attribute (Max Andersen)
+* fixed an NPE at startup that was introduced in beta 1
+* fixed a bug in Map.putAll()
+* new pluggable cache API
+- deprecated <jcs-cache> in favor of <cache>
+- net.sf.hibernate.cache.CacheProvider settable via hibernate.cache.provider_class
+* more aggressive caching
+* added Hibernate.close(Iterator)
+* Criteria queries may now include joins
+- Criteria.addJoin()
+- Criteria.createCriteria()
+* hibernate.transaction.manager_lookup_class should now ALWAYS be specified in JTA environment when using jcs caching
+* fixed a bug caching <key-many-to-one>
+* fixed bug where cached component did not get <parent> property populated
+* added hibernate.max_fetch_depth property
+* smarter outer-join fetching
+* transient object may now be associated with session using Session.lock()
+* added Query.result(), Criteria.result()
+
+Changes in version 2.1 beta 1 (10.8.2003)
+-----------------------------------------
+* batch-size attribute for collection and class mappings, to allow batch loading
+* collections of "value types" (including composite-elements) may now appear in HQL from clause
+* more efficient loading of collections, and better handling of non-lazy collections
+* added HQL index() function to allow access to collection element index
+* added Session.createSQLQuery() (Max Andersen)
+* added outer-join attribute to collection mappings
+* Criteria.setFetchMode() now applies to collection-valued path expressions
+* added property-ref attribute to <one-to-one>, enabling unique foreign key associations
+* added hibernate.max_fetch_depth config property
+* added hibernate.hbm2ddl.auto config property
+* fixed a bug with combination of <jcs-cache> and <key-many-to-one>
+* support for Dialect-specific SQL functions in HQL select clause (David Channon)
+* added Session.clear()
+
+Changes in version 2.0.2 (2.8.2003)
+-----------------------------------
+* subqueries may now use HAVING and GROUP BY clauses
+* fixed a bug with setMaxResults(), setFirstResult() in HSQL (introduced in 2.0.1)
+* fixed a bug in Set.removeAll()
+* fixed a bug in SchemaUpdate (Mathias Bogaert)
+* added weak typing functionality to ScrollableResults
+* fixed a bug with "calendar" versioning in IBM JDK1.3.1 (workaround for JDK bug)
+* fixed a bug in mapping DTD that caused a problem for hbm2java (Max Andersen)
+* fixed a bug querying nested components
+* SQL generation now prefers ANSI-style inner joins to theta inner joins
+* fixed a bug caching collection references loaded using FETCH
+* fixed a bug with composite foreign keys in normalized table mappings (Tom Sedge)
+* limit support for Interbase (Ludovic Orban)
+* added where attribute to <class> mappings
+* added cascade="all-delete-orphan" for collection mappings
+* fixed a bug binding named parameters with setMaxResults()/setFirstResults()
+* fixed some minor bugs in HQL translator
+* fixed a long-standing bug where a <key-many-to-one> could not be dereferenced in HQL
+* SQL UPDATEs now occur in a predictable order (same order as objects were loaded)
+* support for SELECT ... FOR UPDATE in SAPDB
+* fixed bug where Criteria queries against a subclass also returned superclass instances
+* fixed a very rare bug where an update could get lost with normalized mappings
+* fixed a problem with proxied class heirarchies rooted at an interface or abstract class
+* where and order-by attributes now allow SQL function calls and subselects
+* added formula attribute to <property> tag, to allow "computed" properties
+* fixed a bug where PreparedStatements were sometimes not closed when an exception occured
+* workaround for a problem with <joined-subclass> and Interceptor.onFlushDirty()
+
+Changes in version 2.0.1 (17.6.2003)
+------------------------------------
+* fixed some problems with new dialect-specific LIMIT clauses
+* improved parsing of collection where attribute
+* made one-to-many bags more efficient (they are really sets!)
+* allowed type="calendar" for <version> properties
+* fixed a bug with locking a versioned composite-id class
+* refresh() may now take a transient instance
+* added ProxoolConnectionProvider (Martin Crawford)
+* fixed some minor JCA issues (Mike Mosiewicz)
+* fixed a bug with FETCH and sorted associations
+* improved performance of SchemaUpdate tool (Teodor Danciu)
+* fixed a bug in Configuration.addFile(String) (Ken Geis)
+* tidied up and documented hbm2ddl package (esp. Ant tasks)
+* deprecated CounterGenerator in favor of IncrementGenerator
+* improved logging during initialization
+* deprecated "vm" in favor of "increment" id generator
+
+Changes in version 2.0 final (8.6.2003)
+---------------------------------------
+* added "fetch" keyword to HQL
+* added evict() methods to SessionFactory for JVM-level cache
+* destroy caches from SessionFactory.close()
+* fixed an NPE in Session.evict() (Simon Spero)
+* added Query.setLockMode()
+* tidied up implementation of Loader
+* release ResultSets more aggressively
+* miscellaneous improvements to some Dialects
+* hbm2java now honors the sort attribute (Max Andersen)
+* added exceptions to Interceptor interface
+* fixed problem with setMaxResults(), setFirstResult() in Oracle (introduced in beta 6)
+* fixed some SQL generation that was a problem for Sybase (Dietmar Posselt)
+* fixed some problems with ODMG API (Oliver Gries)
+* added JOTMTransactionManagerLookup (Low Heng Sin)
+* added JOnASTransactionManagerLookup (?)
+* fixed a bug in WeblogicTransactionManagerLookup (Mathias Bogaert)
+* added Criteria.setFetchMode()
+* added new Expressions
+* much more elegant/robust handling of quoted identifiers
+* renamed Hibernate.association() to Hibernate.entity()
+* added dynamic-update and dynamic-insert mapping attributes
+* fixed a bug with refresh() of objects with collections
+* HQL aliases now optional - "from Cat" now legal
+* platform-independant quoting of identifiers using backticks
+
+Changes in version 2.0 beta 6 (10.5.2003)
+-----------------------------------------
+* fixed a bug querying one-to-many associations to a <joined-subclass>
+* added support for dialect-specific LIMIT-style clauses (David White)
+* added <idbag>
+* fixed bug in hashCode() of persistent collections
+* <joined-subclass> now supported in HSQL (Wolfgang Jung)
+* fixed problem for XML parsers which ignore default values declared in DTD
+* <meta> tags can now be set to not be inheritable
+* fixed bug in Expression.in()
+* fixed an NPE that could occur from update() in very strange cases (Chris Nockleberg)
+* disabled outer-join back to owner when initializing one-to-many (performance improvement)
+* fixed a bug in Query.setParameterList() (Nick Heudecker)
+* improved JCA support (Igor Fedorenko)
+
+Changes in version 2.0 beta 5 (21.4.2003)
+-----------------------------------------
+* Informix support (Steve Molitor)
+* fixed a bug parsing "select new ... " queries
+* deprecated "object" type in favor of <any> mappings
+* added Session.contains()
+* added extra DBCP config options (Alex Burgel)
+* SessionFactory.close() now unbinds from JNDI
+* added Session.evict()
+* got rid of an unnecessary SQL DELETE issued when an empty collection was dereferenced
+* where attribute of collection mappings no longer ignored for deletion
+* improved logging
+* support polymorphic associations to "embedded" composite id classes
+* various bugfixes to collection filter parameter binding
+* fixed some problems with proxies introduced in earlier beta versions
+* fixed bug with self-reference in the case of identity column id generation
+* added hibernate.cglib.use_reflection_optimizer property
+* added nonstrict-read-write cache
+* fixed an SQL-generation bug in new Criteria API
+* added CompositeUserType
+* sequence and table id generators now aware of default-schema
+* added update and insert attributes to <component> element
+* fixed a bug with expressions like elements(foo.bar.baz) in where clause
+* more efficient Set initialization (two-phase load)
+* removed support for hibernate.query.imports and added <import> mapping element
+* fixed problem in DBCP connection validation and added new config properties
+* hbm2java can now generate finder methods for persistent objects (experimental) (Matt Hall)
+* hbm2java small fixes/refactorings to support generating more than one file per persistent object (Max Andersen)
+
+Changes in version 2.0 beta 4 (22.3.2003)
+-----------------------------------------
+* Major HQL improvements
+- from "Foo as foo join foo.bars as bar" instead of "from foo in class Foo, bar in elements(foo.bars)"
+- "select new Foo(bar.name, bar.amount) from ...."
+- outer and full join support
+* Query methods now return this, to allow chaining
+* FrontBase support (Run Lussier)
+* experimental JCA support (Daniel Bradby)
+* hbm2java now can generate Beans style property events (Klaus Zimmermann)
+* support SQL identifiers quoted with []
+* fixed bug with PostgreSQL
+* name attribute now optional in .cfg.xml
+* support for postgres ilike operator (M Lang)
+* squash warnings with GNU JAXP (Chris Nockleberg)
+* fixed a bug in Query.setParameterList()
+* Ingres support (Ian Booth)
+* collections now detect changes not made via wrapper for newly saved objects
+* new (experimental) Criteria + Expression APIs
+* Query.setEntity(), etc, now aware of proxies (also improved hueristics for guessing Type)
+* added Hibernate.isInitialized()
+* detect changes made directly to newly-wrapped collection (ie. not via the wrapper)
+* added Hibernate.refresh(Object, LockMode)
+* update(), saveOrUpdate() no longer initialize a proxy
+* fixed problems with Sybase
+* added force attribute to <discriminator>
+* improved handling of null discriminator-value
+* support SQL-style '' escape for HQL strings
+
+Changes in version 2.0 beta 3 (24.2.2003)
+----------------------------------------
+* collections now represent null elements as a missing row
+* collections now deserialize correctly (fix for bug in beta 2)
+* standardised on dom4j for XML parsing
+* fixed bugs in collection caching (an exception occurred for some sorted collections and some kinds of maps)
+* allowed null discriminators
+* set autocommit to true in SchemaUpdate
+* fixed a stack overflow that could occur in toString() of classes created with hbm2java (Max Andersen)
+* fixed a bug where composite-element <parent> property was not being set after retrieval from cache
+* added where attribute to collection mappings to allow filtering
+* fixed a exception that occurred when wrapping collections with sort="MyComparator" (Jason Horne)
+* objects with mutable="false" are now never updated
+* fixed an exception that occurs with <key-many-to-one> association to a class with a composite id (Stefano Travelli)
+* added SchemaExport Ant task (Rong C Ou)
+* integrated latest CGLIB release (Juozas Baliuka)
+- added support for new CGLIB reflection optimizer (Juozas Baliuka)
+* improved query cache algorithm (Who?)
+* fixed a bug in "object" type
+* Lists and arrays now represent null elements as a missing row
+* fixed a bug in Hibernate PreparedStatement cache where maxRows and fetchSize were not cleared before re-caching
+* fixed a bug in HibernateService that caused a restart to fail
+* added SybaseAnywhereDialect (?)
+* added SessionFactory.close()
+
+Changes in version 2.0 beta 2 (2.2.2003)
+----------------------------------------
+* property column names may now be of any length (Mark Woon)
+* fixed problem where CodeGenerator created private get/set pairs (Max Andersen)
+* fixed all silly bugs in Configuration.configure()
+* efficient collection updates from Session.update()
+* added <jcs-class-cache> and <jcs-collection-cache> elements to hibernate-configuration.dtd
+* support for normalized mappings for databases with DECODE instead of CASE (Simon Harris)
+* added Oracle9Dialect
+* added JRun4TransactionManagerLookup (Joseph Bissen)
+* fixed JDBCException to keep reference to underlying SQLException
+* fixed a bug loading many-to-many associations with a repeated column name
+* fixed a bug in ShortType
+* added IngresDialect (Ian Booth)
+* added --config option to SchemaExport
+
+Changed in version 2.0 beta 1 (28.1.2003)
+-----------------------------------------
+* renamed packages to net.sf.hibernate.*
+* all API methods now wrap SQLExceptions
+* removed support for toplevel collections / subcollections
+* created hibernate-mapping-2.0.dtd
+- renamed 'readonly' attribute to 'inverse'
+- renamed 'role' attribute to 'name'
+- changed default value for 'unsaved-value' to "null"
+- added mandatory 'name' attribute to <param>
+- added <meta> tag
+* created hibernate-configuration-2.0.dtd
+* brand new Configuration API, including exposed mapping package
+* completely reworked IdentifierGenerator framework
+- built-in generators now auto-detect the type (so integer identity columns are supported, for example)
+- parameters are now named
+- built-in strategies are renamed
+* expanded Interceptor interface
+* removed exceptions that occur if an object is saved or deleted multiple times in a session
+* added <parent> subelement to <composite-element> and <nested-composite-element>
+* collections except for <bag>s now implement by-value equals() and hashCode()
+* removed all deprecated methods
+* added Session.refresh()
+* added dynamic-update functionality
+* added update and insert attributes to <property> and <many-to-one> mappings
+* added elements(), indices(), size(), maxelement(), minelement(), maxindex(), minindex() collection functions to query language
+* huge improvements to CodeGenerator (Max Andersen)
+* enhanced outerjoin fetching support in queries
+* experimental support for DynaBeans as components
+
+Changes in version 1.2.3 (28.1.2003)
+------------------------------------
+* fixed a recently-introduced problem with Timestamp dirty checking
+* added createClob(), createBlob() for streams (Benoit Menendez)
+* SchemaUpdate now configures Dialect correctly (Michael Locher)
+* update() now working for classes with embedded composite ids
+* unsaved-value attribute now recognized for <composite-id>
+* fixed a minor problem where a very specific kind of SQL select did not qualify a column name
+* added Query.getQueryString()
+* fixed an NPE that sometimes occurred when hibernate.connection.username was not specified
+* fixed a bug in SchemaExport where foreign key constraints did not use qualified tablenames
+* added isFirst(), isLast() to ScrollableResults
+* fixed bug finding properties inherited by mapped interfaces
+
+Changes in version 1.2.1b (4.1.2003)
+------------------------------------
+* fixed an NPE that occurred while loading Hibernate classes in IBM JVM
+* arbitrary JNDI InitialContext properties may now be passed as hibernate.jndi.*
+* fixed a problem where index column was not being nullified when an entity was removed from a one-to-many
+
+Changes in version 1.2.1 (31.12.2002)
+-------------------------------------
+* Changed the MySQL mapping of Hibernate "timestamp" to MySQL "DATETIME" (Matthias Schwinn)
+* TransactionManagerLookup classes now define defaut UserTransaction JNDI names
+* support for WebSphere 5 (Venkat Srinivasan)
+* fixed a bug with query expressions of the form "foo.bar.id" for normalized mappings
+* experimental Blob/Clob support (thanks to Benoit Menendez and Mark Woon)
+* improvements to SchemaUpdater (Benoit Menendez)
+* deprecated suspendFlushes() / resumeFlushes() in favor of FlushMode
+* deprecated IDGenerationException in favor of IdentifierGenerationException
+* fixed a bug introduced in 1.2 final where cascade save-update was sometimes ignored for readonly="true" bags
+* fixed a bug caching null-valued one-to-one associations
+* CodeGenerator now supports <bag> and <joined-subclass>
+* fixed problem with TimestampType on DB2 (Jonas)
+* fixed a bug in generated SQL for collections with <joined-subclass> mappings (Robson Miranda)
+* fixed a bug caching Maps (Benoit Menendez)
+* SchemaExport now accepts a .jar file as a source of mappings
+* hibernate.dbcp.validationQuery setting (Juozas Baliuka)
+* hibernate.c3p0.validate setting
+* added Query.setTimeout()
+* setMaxResults() now behaves sensibly on SAPDB (Russel Smyth)
+* added Query.setProperties() and Query.getNamedParameters(), fixed a bug in Query.getReturnTypes()
+* CodeGenerator now generates equals() and hashCode() for composite-id classes (and toString() for all classes)
+* CodeGenerator now includes superclass properties in subclass constructors (Max Andersen)
+* added Hibernate.custom()
+
+Changes in version 1.2 final (7.12.2002)
+----------------------------------------
+* fixed a bug where uppercase IS NOT NULL, NOT IN, etc were not parsed correctly
+* addition to readonly="true" bags now no longer requires collection initialization
+* added ResinTransactionManagerLookup (Aapo Laakkonen)
+* improved exception message when setting null to primitive type (Max Andersen)
+* improved exception message for an unserializable identifier
+* support for overloaded setter methods (patch by Alex Staubo)
+* CodeGenerator support for <composite-element> (patch by Wolfgang Jung)
+
+Changes in version 1.2 beta 4 (29.11.2002)
+------------------------------------------
+* fixed bugs in one-to-many associations to a <joined-subclass>
+* LockMode class now properly serializable
+* exceptions thrown by proxied objects are now propagated correctly (rather than being wrapped)
+* made Calendar types compilable in JDK1.2
+* added --format and --delimiter options to SchemaExport (thanks to Richard Mixon)
+* fix for problem with class with no properties + native id generation + MS SQL Server contributed by Max Andersen
+* fixed a BAD bug in Hibernate.configure() (thanks to Rob Stokes)
+* CodeGenerator now recognizes <key-many-to-one> (patch by Wolfgang Jung)
+* CodeGenerator now recognizes <version> and <timestamp> (patch by Max Andersen)
+
+Changes in version 1.2 beta 3 (26.11.2002)
+------------------------------------------
+* fixed bug in UPDATE SQL generation for <joined-subclass> mapping strategy (fix by Robson Miranda)
+* support <composite-id> correctly in CodeGenerator (patch by Tom Cellucci)
+* fixed an exception that occurred with short qualified tablenames
+* added the polymorphism attribute to the <class> element
+* allow "not between", "not in" in query language
+* allow subqueries beginning with a from clause in query language
+* query expressions like "not (foo.bar.baz=1)" now translated to "(bar.baz!=1 and foo.bar=bar.id)"
+* support for PostgreSQL ~ operator (regular expression match)
+* load(id, lockMode) now working for normalized table mappings
+* now compiling properly under JDK1.2, 1.3 (fix by Tom Cellucci)
+* support for subcollections in query language: foo.bars[2]['index'], foo.bars[4].elements, foo.bars[0].size, etc.
+* added calendar and calendar_date types
+* find() queries may now return scalar values
+* component-type properties may appear in a select clause
+* ConnectionProviders now set isolation level before toggle autocommit
+* Iterator.next() now throws NoSuchElementException as per Iterator contract (fix by Alex Staubo)
+* database reverse engineering GUI tool contributed by Tom Cellucci
+* SchemaExport now generates column in mapping file order (rather than alphabetical order)
+* <joined-subclass> mappings working on Oracle (?)
+
+Changes in version 1.2 beta 2 (15.11.2002)
+------------------------------------------
+* support multi-argument SQL functions in queries
+* reintroduced deprecated form of update() with slightly altered semantics
+* fixed BAD problem in the generated SQL for certain queries
+* added OrionTransactionManagerLookup
+
+Changes in version 1.2 beta 1 (11.11.2002)
+------------------------------------------
+* Fixed a bad bug binding to JNDI with servers that use serialization in preference to getReference()
+* support for quoted SQL identifiers (patch by Jean-Francois Nadeau)
+* Hibernate.initialize() allows the user to force initialization of a proxy or persistent collection
+* fix to minor bug in CodeGenerator by Max Andersen
+* fixed a problem with outerjoin fetching of one-to-one associations defined on subclasses
+* fixed a minor problem with proxies of classes that override finalize()
+* finished work on normalized table mappings using <joined-subclass> declaration (only for databases with ANSI OUTER JOIN and CASE)
+* deprecated hibernate-mapping.dtd in favor of hibernate-mapping-1.1.dtd
+* reworked unmapped class / interface / table-per-concrete-class query functionality, fixing several problems
+* removed deprecated methods
+* deprecated findIdentifiers()
+* fixed some problems with embedded composite identifiers
+* fixed a bug cascading deletes to one-to-one associations
+* CodeGenerator now generates isFoo() style getters for boolean properties (patch by Aapo Laakkonen)
+* components may now have a nonpublic constructor (patch by Jon Lipsky)
+* changes / bugfixes to MapGenerator tool
+* experimental SchemaUpdate tool contributed by Christoph Sturm
+
+Changes in version 1.1.8 (30.10.2002)
+-------------------------------------
+* full support for composite keys in query language
+* fixed bug where character type could not be null
+* fixed bug parsing collection filters like: "group by this.date"
+* fixed a bad bug where C3P0 properties were not always being used
+* replaced hibernate.use_jdbc_batch with hibernate.jdbc.batch_size
+* renamed some other properties to hibernate.jdbc.*
+* made hibernate.show_sql settable from JMX (patch by Matas Veitas)
+* added SessionFactory.getAllClassMetadata(), getAllCollectionMetadata (patch by Max Andersen)
+* allowed use of concrete-class proxies with inherited classes ie. <subclass name="ConcreteClass" proxy="ConcreteClass">
+* HibernateException extends Apache commons lang NestableException (patch by Max Andersen)
+* <parent> subelement of <component> allows a component to get a reference back to owning entity
+* Query.setParameterList() to bind lists of values to "in (:list)"
+* Java constants may now be used in Queries
+* serialization of an object graph now removes all initialized proxies
+* several other improvements to proxy handling
+* proxies may now be used in JDK 1.2
+
+Changes in version 1.1.7 (25.10.2002)
+-------------------------------------
+* added Session.createFilter()
+* fixed a bug parsing queries with properties of form idXXX (introduced in 1.1.6)
+* fixed a bug parsing queries with the id property named in the select clause (introduced in 1.1.6)
+* fixed a bug dirty checking big_decimal (fix by Andrea Aime)
+
+Changes in version 1.1.6 (24.10.2002)
+-------------------------------------
+* classes without subclasses may now declare themselves as their own proxy
+* outer-join attribute now working for component properties and <many-to-many>
+* outer-join="true" will now force outerjoin loading for an association even if associated class has a proxy
+* enabled oracle-style outerjoins for SAP DB
+* version properties may now be long or short (previously always integer)
+* discriminators may now be boolean type
+* fixed the foo.bar.id.baz syntax for queries doing composite-key joins
+* fixed an NPE that occurred when no Dialect was specified
+* CodeGenerator now fully proxy-aware (patch by Max Andersen)
+* removed dependency upon trove4j
+
+Changes in version 1.1.5b (20.10.2002)
+--------------------------------------
+* fixed an NPE that occurred on JMX startup
+* smarter fetching for one-to-one associations
+
+Changes in version 1.1.5 (19.10.2002)
+-------------------------------------
+* added built-in currency and timezone types
+* hibernate-mapping-1.1.dtd
+- added <index-many-to-many> and <composite-index> subelements of <map>
+- added <key-property> and <key-many-to-one>
+- renamed "save/update" to "save-update"
+- tightened up the dtd (now using enumerated attribute types)
+* enabled multi-column map indexes (ie. key of a Map)
+* composited-id may now include a many-to-one association
+* improvements to Databinder contributed by Brad Clow
+* fixed bugs in minIndex, maxIndex, minElement, maxElement
+* fixed a problem with JTATransaction in a JBoss BMT bean
+* added addMapResource() to the MBean
+* minor improvements to Configuration
+* more accurate cache entry timestamping to increase the likelihood of cache hits
+* JCS cache may now be used with JTATransaction in WebSphere, Weblogic, JBoss (thanks to Matt Baird)
+* improvements to CodeGenerator contributed by Andrea Aime
+* stopped a TransientObjectException that was being thrown when it shouldn't be
+* re-enabled primary key export for tables of sets with not-null elements
+* hibernate.statement.fetch_size configuration contributed by Matas Veitas
+* added Interceptor application callback interface
+* added metadata package to expose persistence metadata to the application
+* changed filter() argument type from Collection to Object to allow filtering of arrays and Maps
+* added <column> index attribute to allow table indexes to be specified in mapping document
+* implemented support for queries against interfaces and abstract superclasses
+
+Changes in version 1.1.4b (4.10.2002)
+-------------------------------------
+* fixed problems for JDK1.2 (thanks to Chris Webb)
+
+Changes in version 1.1.4 (4.10.2002)
+------------------------------------
+* New locking API
+* disabled 2-phase load for objects contained in Sets (because they should be initialized before equals() or hashCode() is called)
+* fixed a bug where non-serializable cache entries could not be cached by JCS auxiliary cache
+* fixed a bug in dirty checking PersistentEnums
+* deprecated getID() in favor of getIdentifier() (for mainly cosmetic reasons)
+* HibernateService may now be subclassed to obtain mapping files by some other mechanism (patch by Chris Winters)
+
+Changes in version 1.1.3 (1.10.2002)
+------------------------------------
+* new 2-phase loading process (replaces complicated "deferred" loading process)
+* new ScrollableResults interface for efficiently navigating Query results
+* removed deprecated interfaces
+* created engine package to hold "internal" APIs (ie. the external contract of the impl package)
+* fixed bug where a component defined before all collections in the mapping file caused collections to not be persisted (thanks to Michael Link)
+* fixed a bug where cascaded saveOrUpdate was ignoring the unsaved-value setting
+* faster Timestamp dirty checking
+
+Changes in version 1.1.2 (29.9.2002)
+------------------------------------
+* added persister attibute of class mapping to support custom persistence strategies
+* Support for Oracle outerjoins contributed by Jon Lipsky
+* Reworked versioning, fixing bugs (and tightening tests)
+* Fixed a bug where an ObjectNotFoundException was thrown for null one-to-one associations
+* fixed problems with timestamps introduced in 1.1.1
+* added batch file for running demo
+
+Changes in version 1.1.1 (27.9.2002)
+------------------------------------
+* Major refactoring / abstraction of persistence logic
+* added maxIndex, minIndex, maxElement, minElement properties for collections
+* added support for class names in where clause of queries
+* fixed a bug where an association could become null after caching
+* fixed a bug where an NPE could occur for a null component
+* fixed minor bugs in SortedMap, SortedSet
+* object type is now cacheable
+* added big_integer type
+* improved dirty checking for timestamp type
+
+Changes in version 1.1.0 (22.9.2002)
+------------------------------------
+* implemented collection indexing with [] in query language
+* fixed some minor query-language bugs
+
+Changes in version 1.1 beta 14 (19.9.2002)
+------------------------------------------
+* bags now implement java.util.List
+* delete() may now take a transient object
+* bug where sorted collections were not being sorted fixed by Brad Clow
+* fixed a bug in many-to-many association filtering
+* no longer try to query connection metadata when using user-supplied connections
+* added hibernate.use_scrollable_resultsets for user-supplied connections
+* fixed a problem where sublists were not being proxied
+* fixed a problem where Hibernate could not call methods of package-visibility classes
+* removed obsolete select attribute from MapGenerator
+* multiple occurrences of same path in a query no longer require multiple joins
+* added WrongClassException
+
+Changes in version 1.1 beta 13 (15.9.2002)
+------------------------------------------
+* added constants to Lifecycle interface
+* fix for circular cascade="save/update"
+* fixed a bug in cascaded update introduced in version 1.1 beta 11
+* added object type
+
+Changes in version 1.1 beta 12 (14.9.2002)
+------------------------------------------
+* Session.filter() for applying a filter query to collections
+* experimental ODMG API (OQL features are not yet compliant)
+* new DBCPConnectionProvider for Apache commons-dbcp connection pool
+* Session.lock() now does version number check even on databases with no FOR UPDATE clause
+* introduced new cascade styles: cascade="save/update", cascade="delete"
+* added default-cascade attribute
+* foreign key columns lengths now automatically set to primary key column lengths for SchemaExport
+* added error checking of row update counts when batching disabled
+* major improvements to ProxyGenerator tool
+* CodeGenerator now aware of proxy attribute
+* integrated PointbaseDialect contributed by Ed Mackenzie
+* fix for problem where Proxies were being initialized on identifier access by Christoph Sturm
+
+Changes in version 1.1 beta 11 (7.9.2002)
+-----------------------------------------
+* deprecated update() in favor of saveOrUpdate() and introduced unsaved-value attribute of <id>
+* children mapped with cascade="all" are now always saved/updated even without a call to update(parent)
+* support for composite-id classes where the composite id consists of properties of the persistent class
+* added constrained attribute to <one-to-one> element
+* added Validatable interface
+* renamed several config properties (Hibernate issues log warnings for obsolete property usage)
+* arbitrary JDBC connection properties may now be passed using hibernate.connection.*
+* fixed a classloading bug in C3P0ConnectionProvider (introduced in 1.1 beta 10)
+* CodeGenerator may now take multiple mapping files on the commandline
+
+Changes in version 1.1 beta 10 (28.8.2002)
+------------------------------------------
+* fixed a bug that occurred when calling Session.update() for an object with no properties
+* changed class loading to use the context classloader first
+* introduced <timestamp> as an alternative to <version>
+* added Query.getReturnTypes()
+* fixed a bug with composite-elements introduced in 1.1 beta 7
+* save() may now be used to persist classes with composite-ids
+* improved handling of nanoseconds values in Timestamps
+* support for composite id properties + objects in select clause of iterate()
+* beefed-up collection tests
+
+Changes in version 1.1 beta 9 (26.8.2002)
+-----------------------------------------
+* fixed a bug introduced in 1.1 beta 8 that could cause an NPE after deserializing a session with proxies
+* deprecated insert() in favor of more flexible save()
+* deprecated IDGenerator in favor of new IdentifierGenerator interface
+* "assigned" id generator now returns the existing value of the id property instead of throwing an Exception
+* fixed a problem where PreparedStatements were not being recached after retrieving a natively generated id
+
+Changes in version 1.1 beta 8 (25.8.2002)
+-----------------------------------------
+* fixed a bug introduced in 1.1 beta 6 where an updated element of an indexed one-to-many collection caused an SQLException
+* uninitialized collections passed to update() may now be initialized in the new Session
+* uninitialized proxies passed to update() may now be initialized in the new Session
+
+Changes in version 1.1 beta 7 (23.8.2002)
+-----------------------------------------
+* fixed a bug where Hibernate was not returning statements to the cache when batch updates were disabled
+* fixed a bad bug parsing mappings with toplevel one-to-many associations
+* fixed a bug with versioning and subcollections
+* reworked Set updates again for much improved efficiency
+* schema export now creates primary keys for indexed collection tables
+* minor refactor to Type hierarchy
+* improved some user-error detection
+* fixed foreign key constraint creation for MySQL with Innodb tables
+
+Changes in version 1.1 beta 6b (20.8.2002)
+------------------------------------------
+* Fixed a problem updating Sets
+* added <bag> mapping for java.util.Collection
+
+Changes in version 1.1 beta 6 (20.8.2002)
+-----------------------------------------
+* completely reworked fetching code
+- one-to-many associations now always fetched in a single select
+- many-to-many associations fetched in a single select when outerjoin fetching is enabled
+- this includes nested outerjoin fetching of the associated class!
+- outerjoin fetching for <many-to-one> nested inside <component> or <composite-element>
+- code refactored to be cleaner and faster
+* removed unnecessary order by clause in List and array fetching SQL
+* collections now individually update, insert and delete only rows that changed (thanks to Doug Currie)
+* fixed a problem where exceptions were being wrapped in a LazyInitializationException for non-lazy collections
+* added order-by attribute to <set> and <map> to specify a table column as defining the iteration order (JDK1.4 only)
+* improved error detection in Session.update()
+* further usage of JDBC2 batch updates
+* some fine-tuning of JDBC2 feature usage configuration
+* CodeGenerator will now generate components and arrays
+* fixed problem where CodeGenerator could not generate classes in the default package
+* improved logging of flush() activity
+* renamed property hibernate.use_jdbc2 to hibernate.use_jdbc_batch
+
+Changes in version 1.1 beta 5 (13.8.2002)
+-----------------------------------------
+* hibernate.query.imports property to allow use of unqualified classnames in queries
+* fixed a bug in collection flushing that was introduced in 1.1 beta 4
+
+Changes in version 1.1 beta 4 (11.8.2002)
+-----------------------------------------
+* JMX integration (thanks to John Urberg)
+* "having" clause in query language
+
+Changes in version 1.1 beta 3 (10.8.2002)
+-----------------------------------------
+* removed the select="all" attribute for <class> mappings - "select distinct" now specified in the hibernate query
+* system properties now override hibernate.properties
+* Session now flushes changes even less often (only when actual updates to the queried table(s) are waiting)
+* fixed a *very* rare problem where an unnecessary update could be accidently issued before a delete
+
+Changes in version 1.1 beta 2 (6.8.2002)
+----------------------------------------
+* fixed a bug exporting schemas with identity columns
+* implemented factory-level caching of collections
+* Datastore.storeJar() contributed by Christian Meunier
+* added <mapping jar="jarfile"> to hibernate.cfg.xml
+
+Changes in version 1.1 beta 1 (4.8.2002)
+----------------------------------------
+* new Query API including named parameters, pageable results
+* subqueries in Hibernate queries (only for databases that support subselects)
+* new DocBook documentation (contributed by Christian Bauer)
+* support collections .elements, .indices inside select clause (even in aggregate functions)
+* don't load collections before removal unless absolutely necessary
+* mutable="false" attribute in <class> element to map immutable classes
+* use JDBC batch to insert collection elements if hibernate.use_jdbc2 is set
+* brand new PreparedStatementCache
+* improvements to MYSQL dialect for long datatypes
+* always check isAccessible() before setAccessible(true)
+* removed extra unnecessary table join in queries with one-to-many association
+* removed ugly "WHERE 1=1" from generated SQL
+* fixed exception mapping a class with no properties (fix by Rob Stokes)
+* logging enhancements including SQLException logging
+* reworked factory-level cache and integrated JCS support (thanks to Christian Meunier)
+* fixed a bug with circular references in cached data
+* removed blocking cache support
+* now rendering outerjoins as "LEFT OUTER JOIN" because "LEFT JOIN" caused problems for some Sybase versions
+* added default Hibernate properties to Dialects
+* native id generation now falls back to sequence id generation when identity columns not supported by the dialect
+* fixed some problems with native id generation under HSQL
+* may now use Session.insert() even when using native id generation
+
+Changes in version 1.0.1b (18.7.2002)
+-------------------------------------
+* fixed a bad bug in query parser when hibernate.query.substitutions was unset
+* much improved build.xml Ant script
+* latest c3p0.jar
+
+Changes in version 1.0.1 (17.7.2002)
+------------------------------------
+* enabled use of scalar values and aggregate SQL functions in select clause of iterate() queries
+* fixed bug in JNDI lookup for SessionFactory
+* changed ordering of SQL inserts/deletes for child collections of a cascade-enabled association
+- better behaviour for some not-null constraints
+- performance optimization for bidirectional many-to-one associations
+* added hibernate.query.substitutions property to allow named query constants (eg. translate 'true' to '1')
+* added locale type for java.util.Locale
+* added sequence hi/lo generator (seqhilo.long)
+* fixed bug where load(), onLoad() callbacks were sometimes called at wrong time
+* fixed an exception (fix by Eric Everman) and improved identifier searching in MapGenerator tool
+* refactored SerializableType
+* extra logging + error handling
+* documentation enhancements
+
+Changes in version 0.9.17 (3.7.2002)
+------------------------------------
+* Added UserType interface
+* documented Lifecycle
+* added some new trace messages to log
+* bugfix to allow SQL functions like upper(), lower(), etc to work on all platforms
+* documented SAP DB support (dialect contributed by Brad Clow)
+* foreign key constraint export for SAP DB
+* map index may be the composite-id of the element class (contributed by Jon Lipsky)
+* fixes to CodeGenerator tool (contributed by Uros Jurglic)
+
+Changes in version 0.9.16 (19.6.2002)
+------------------------------------
+* fixed bug cacheing objects with references to themselves
+* support for composite ids of classes with no id property
+* may now disable outer join (deep) fetching for an association by setting outer-join="false"
+* enabled outer join fetching for one-to-one
+* fixed a bug for mappings that specify class attribute of <one-to-many>
+* fixed a bug where Hashbelt did not expire cached data in a timely fashion
+* fixed a mistake in the mapping DTD
+* new user-error check in update()
+
+Changes in version 0.9.15 (15.6.2002)
+------------------------------------
+* one-to-one associations
+* support for "tricky" mappings in SchemaExport tool (multiple properties to one column, etc)
+* Transaction API contributed by Anton van Straaten
+* SessionFactory may be bound to JNDI name by setting hibernate.session_factory_name
+* Sessions are now Serializable!
+* added Session.findIdentifiers() query methods
+* new Lifecycle interface to replace deprecated PersistentLifecycle
+* fixed problem where session did not autoflush on iterate() queries
+* performance enhancements to collection dirty checking
+* added Hibernate.configure() and configuration file format
+* removed some deprecated methods
+* refactored Type hierarchy
+* query language identifiers now case sensitive (bugfix for case sensitive SQL dialects)
+* username/password now optional for datasource (contributed by Emmanuel Bourg)
+* much improved API documentation
+* binary types now saved using streams if hibernate.use_streams_for_binary=true (contributed by Jon Lipsky)
+* MySQL Strings now mapped to TEXT columns if length > 255 (contributed by Christoph Beck)
+
+Changes in version 0.9.14 (4.6.2002)
+-------------------------------------
+* lifecycle objects - properties now have a cascade attribute to cascade save, update, delete
+* composite id properties may now be used in queries eg. foo.id.bar (contributed by Jon Lipsky)
+* slightly changed semantics of update() so it now also save()s new transient instances
+* Session now flushes() itself less often before query execution (performance enhancement)
+* fixed problem where Session.save() returned null instead of the natively generated id
+* fixed bug with object identity for cached classes
+* fixed bug where delete(x) could not be called after update(x)
+* MUCH improved Exception hierarchy
+* deprecated create()
+* added sql-type attribute to <column> tag to allow user to override default type mapping
+* deeper fetching with use_outer_join
+* new ConnectionProvider framework
+* fixed a bug where blocking cache could return stale data
+* now working again in JDK1.2.2
+* fixed problem with not-null associations + native key generation
+* minor changes to PersistentLifecycle interface
+* initial, minimal version of new Transaction mechanism
+* MUCH improved documentation
+
+Changes in version 0.9.13 (25.5.2002)
+-------------------------------------
+* Datastore.storeResource() to load mapping files from classpath
+* fixed a problem executing under JDK1.3 when compiled from JDK1.4
+* documentation improvements
+
+Changes in version 0.9.12 (24.5.2002)
+------------------------------------
+* Session.update() methods to update a persistent instance from transient copy (as requested by many users)
+* discriminator column name, type, length, etc now configurable by <discriminator> tag in mapping file
+* discriminator column values configurable by discriminator-value attribute of <class> and <subclass> tags
+* added Session.insert(object, id) for classes with no identifier property
+* fixed another bad bug with connection handling (fix by Anton van Straaten)
+* fixed a problem with deferred loading
+* fixed a problem with sorted collections (fix by Anton van Straaten)
+* nested collections of objects now require 2 SQL SELECTs to load, rather than size+1
+* session is NO LONGER atomic - application should discard session when exception occurs
+* fixed problem where character type was mapped to VARCHAR column
+* arrays of proxies now possible by using new element-class attribute of <array> tag
+* fixed various problems with proxies
+* added proxy generation tool
+* proxy unit tests
+* replaced two RuntimeExceptions with checked exceptions
+* made hibernate.username/hibernate.password optional for DriverManager
+* CodeGenerator now supports all hibernate basic types
+* much improved caching algorithm for compiled queries
+* may now specify properties simply by placing hibernate.properties in classpath
+* documentation improvements + fixes
+* --abstract switch to MapGenerator (contributed by Eric Everman)
+
+Changes in version 0.9.11 (12.5.2002)
+------------------------------------
+* fixed major bug with connection handling (fix by Anton van Straaten)
+
+Changes in version 0.9.10 (11.5.2002)
+------------------------------------
+* set a default schema name using SessionFactory property hibernate.default_schema
+* code generator tool contributed by Brad Clow (www.workingmouse.com)
+* lazy object initialization under JDK 1.3 and above
+* fixed some error messages to go to logging framework, not stdout
+* new system property hibernate.show_sql=true logs all executed SQL to stdout
+* integration of bugfixes in c3p0
+* wrap IllegalArgumentExceptions in HibernateExceptions
+* added ObjectNotFoundException and StaleObjectStateException
+* fixed a bug when using schemas
+* new caching strategy (and documented cache feature)
+
+Changes in version 0.9.9 (25.4.2002)
+-----------------------------------
+* sorted sets and maps (thanks to Doug Currie)
+* mapping files may now be loaded using getResourceAsStream() (thanks to Markus Meissner)
+* hibernate messages now logged by Apache commons-logging
+* default hi/lo generator table now has column named "next_id", instead of "next"
+* query language may now refer to identifier property name (eg. foo.fooKey as alternative to foo.id)
+* hibernate.jndi_class, hibernate.jndi_url now optional when using datasource
+* hibernate now throws an exception if you try to persist an object with a reference to a transient object
+* improved connection pooling algorithm (hibernate.pool_size limits pooled conections)
+* very experimental integration of c3p0 JDBC connection pool (http://sourceforge.net/projects/c3p0)
+* now compiles under JDK 1.2.2
+* fixed bug persisting null components
+* fixed bug where cached prepared statements were not cleaned up after disconnect() session
+* fixed a null pointer exception in MappingByReflection
+
+Changes in version 0.9.8 (13.3.2002)
+-----------------------------------
+* supports database native key generation in Sybase, MS SQL, MySQL, DB2, Hypersonic (contributed by Christoph Sturm)
+* supports Mckoi (dialect contributed by Doug Currie)
+* supports Progress (dialect contributed by Phillip Baird)
+* added exceptions to catch Session reentrancy from PersistentLifecycle.load() + store()
+* experimental cross-transaction cache
+* Session.lock() and Session.loadWithLock() for pessimistic locking
+* HiLoGenerators may now use their own DriverManager connection properties + may now use same table across diff mapping files
+* Session.flush(), Session.close() and Session.connection() replace Session.commit(), Session.cancel()
+* Session.disconnect() and Session.reconnect() for long transactions
+* added single JVM id generators vm.long, vm.hex
+* added unique column constraints to mappings
+* extensions to IDGenerator framework
+* support sequence-style ID generation in Oracle, PostgreSQL, DB2, Interbase
+
+* fixed problem where subcollections of a collection that changed roles would be deleted
+* changed class loading strategy to be compatible with JBoss
+* stopped queries retrieving unnecessary columns
+* mutable types (binary + serializable) now always detected as dirty
+
+Changes in version 0.9.7 (26.2.2002)
+-----------------------------------
+* save() now safe from foreign key violations (so create() is no longer preferred method of adding data)
+* delete() now completely safe from foreign key violations - it no longer matters what order objects are deleted in
+* removed Session.copy()
+* hilo generators now NOT for use with application server datasources
+
+* fixed two intermittent bugs in queries
+* fixed a problem where components not detected as dirty
+* fixed broken hilo generator which was not updating database
+* fixed a minor bug when hibernate.use_outer_join was set
+
+Changes in version 0.9.6 (24.2.2002)
+-----------------------------------
+* experimental XML generation
+* added support for bi-directional associations (one-to-set, set-to-set) with <set readonly="true"> config
+* reflective generation of mappings tool was contributed by Doug Currie
+* Session operations now atomic, so exceptions are recoverable
+* made ID properties optional in persistent classes
+* support for multiple schemas through schema attribute of <hibernate-mapping>, <class>, <set>, <map>, etc.
+* auto-creation of tables for hilo id generators (restriction: cannot use same table from more than one mapping file)
+* added some more assertions to catch user "mistakes" like deleting transient or saving persistent objects
+
+* major rework of collections and fixed some bad bugs
+* lazy initialization re-enabled for one-to-many associations (thanks to Georg Schneemayer)
+* fixed a problem in the mapping DTD to allow nested components in collections
+* fixed a BAD bug in RelationalDatabaseSession when loading objects with PersistentLifecycle callbacks (thanks to Paul Szego)
+* fixed problems with quoted strings in query language
+* fixed a bug where a stack overflow occurred instead of HibernateException thrown (thanks to Georg Schneemayer)
+* fixed a bug deleting updated versioned data
+* fixed some problems with name generation for indexes + foreign keys
+* fixed problem in Sun JDK 1.4 (only?) where IllegalArgumentException was not handled
+* minor improvements to handling of dates and times
+* HiLoGenerator now safe for all transaction isolation levels + safe when rollback occurs
+* noticed and fixed obscure piece of nonthreadsafe code outside of core persistence engine
+* removed unnecessary drop constraints for some dialects
+
+* MUCH more comprehensive test suite
+
+* changed some terminology used in documentation
+* added javadoc for API classes
+* commented the mapping DTD
+
+Changes in version 0.9.5 (8.2.2002)
+-----------------------------------
+* supports HypersonicSQL (dialect contributed by Phillip Baird)
+* supports Microsoft SQL server (with third party JDBC driver)
+* proper command-line tool for schema generation and export
+* deprecated the interface cirrus.hibernate.Persistent (due to popular demand)
+* changes to hibernate-mapping DTD (required to support optional Persistent interface):
+- deprecated <property type="package.PersistentClassName"/> in favor of <many-to-one class="package.PersistentClassName"/>
+- deprecated <element type="package.PersistentClassName"/> in favor of <many-to-many class="package.PersistentClassName"/>
+- deprecated <property role="..."/> in favor of <collection role="..."/>
+- deprecated <element role=".."/> in favor of <subcollection role="..."/>
+- deprecated <association> in favor of <one-to-many>
+* class attribute optional in <component> and <composite-id> tags (determined by reflection)
+* querying components of components now supported
+* one-shot table creation (no use of unportable "alter table")
+* time dataype support
+* reflective mappings of java.sql.Time, java.sql.Timestamp, java.sql.Date
+* fixed error msg thrown when class is missing a method but has a superclass
+* property names now conform to JavaBean spec ("foo" instead of "Foo"). Note that "Foo" still works
+* constructors of persistent classes may now be non-public
+* collection indexes now mapped to not-null columns
+* fixed obscure bug with querying collections inside components of components
+* fixed potential bug related to cacheing of compiled queries
+* major rewrite of code relating to O-R mappings
+* Session.copy() and Session.equals() as convenience for users
+* fixed repeated invocations of hasNext() on iterator + iterators now always work with distinct SQL resultsets
+* McKoi dialect was contributed by Gabe Hicks
+
+Changes in version 0.9.4 (29.1.2002)
+------------------------------------
+* fixed BAD bug where XML parsing would not work for parsers other than Xerces - thanks to Christian Winkler
+* added some more assertions to catch user "mistakes" like changing ids or reusing existing ids
+
+Changes in version 0.9.3 (27.1.2002)
+------------------------------------
+* repackaged (corrupted DatasourceConnectionProvider.class)
+* better exception reporting using datasource
+* added Datastore.storeClass() which looks for mapping file in classpath (class foo.Bar -> foo/Bar.hbm.xml)
+* improved documentation
+
+Changes in version 0.9.2 (25.1.2002)
+------------------------------------
+* iterate over query results (lazy instantiation of query results)
+* added "select foo, bar" style queries returning multiple objects per row
+* delete by query
+* composite key support
+* outer joins for faster (?) loading of associated objects ( set "hibernate.use_outer_join" to "true" )
+* connection pooling when using DriverManager
+* foreign key constraint from unkeyed collection table to owner entity table
+* improved drop tables script execution (still not infallible)
+* added <composite-element> tag
+* added not-null properties and elements
+* added an optimisation for dates and components
+* made some XML attributes optional
+* fixed errors in documentation + documented some extra features
+* bugfix: store() not getting called on lifecycle interface
+* bugfix: schema generation for indexed associations
+* added many tests
+
+Changes in version 0.9.1 (20.1.2002)
+------------------------------------
+Too many to list
+
+version 0.8.1
+-------------
+Initial alpha version
+
Deleted: core/tags/hibernate-3.3.0.GA/connection-c3p0/pom.xml
===================================================================
--- core/branches/Branch_3_3/connection-c3p0/pom.xml 2008-08-14 15:58:54 UTC (rev 15071)
+++ core/tags/hibernate-3.3.0.GA/connection-c3p0/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
@@ -1,31 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-parent</artifactId>
- <version>3.3.0-SNAPSHOT</version>
- <relativePath>../parent/pom.xml</relativePath>
- </parent>
-
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-c3p0</artifactId>
- <packaging>jar</packaging>
-
- <name>Hibernate C3P0 ConnectionProvider</name>
- <description>C3P0-based implementation of the Hibernate ConnectionProvder contract</description>
-
- <dependencies>
- <dependency>
- <groupId>${groupId}</groupId>
- <artifactId>hibernate-core</artifactId>
- <version>${version}</version>
- </dependency>
- <dependency>
- <groupId>c3p0</groupId>
- <artifactId>c3p0</artifactId>
- <version>0.9.1</version>
- </dependency>
- </dependencies>
-</project>
\ No newline at end of file
Copied: core/tags/hibernate-3.3.0.GA/connection-c3p0/pom.xml (from rev 15083, core/branches/Branch_3_3/connection-c3p0/pom.xml)
===================================================================
--- core/tags/hibernate-3.3.0.GA/connection-c3p0/pom.xml (rev 0)
+++ core/tags/hibernate-3.3.0.GA/connection-c3p0/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
@@ -0,0 +1,31 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-parent</artifactId>
+ <version>3.3.0.GA</version>
+ <relativePath>../parent/pom.xml</relativePath>
+ </parent>
+
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-c3p0</artifactId>
+ <packaging>jar</packaging>
+
+ <name>Hibernate C3P0 ConnectionProvider</name>
+ <description>C3P0-based implementation of the Hibernate ConnectionProvder contract</description>
+
+ <dependencies>
+ <dependency>
+ <groupId>${groupId}</groupId>
+ <artifactId>hibernate-core</artifactId>
+ <version>${version}</version>
+ </dependency>
+ <dependency>
+ <groupId>c3p0</groupId>
+ <artifactId>c3p0</artifactId>
+ <version>0.9.1</version>
+ </dependency>
+ </dependencies>
+</project>
\ No newline at end of file
Deleted: core/tags/hibernate-3.3.0.GA/connection-proxool/pom.xml
===================================================================
--- core/branches/Branch_3_3/connection-proxool/pom.xml 2008-08-14 15:58:54 UTC (rev 15071)
+++ core/tags/hibernate-3.3.0.GA/connection-proxool/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
@@ -1,31 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-parent</artifactId>
- <version>3.3.0-SNAPSHOT</version>
- <relativePath>../parent/pom.xml</relativePath>
- </parent>
-
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-proxool</artifactId>
- <packaging>jar</packaging>
-
- <name>Hibernate Proxool ConnectionProvider</name>
- <description>Proxool-based implementation of the Hibernate ConnectionProvder contract</description>
-
- <dependencies>
- <dependency>
- <groupId>${groupId}</groupId>
- <artifactId>hibernate-core</artifactId>
- <version>${version}</version>
- </dependency>
- <dependency>
- <groupId>proxool</groupId>
- <artifactId>proxool</artifactId>
- <version>0.8.3</version>
- </dependency>
- </dependencies>
-</project>
\ No newline at end of file
Copied: core/tags/hibernate-3.3.0.GA/connection-proxool/pom.xml (from rev 15083, core/branches/Branch_3_3/connection-proxool/pom.xml)
===================================================================
--- core/tags/hibernate-3.3.0.GA/connection-proxool/pom.xml (rev 0)
+++ core/tags/hibernate-3.3.0.GA/connection-proxool/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
@@ -0,0 +1,31 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-parent</artifactId>
+ <version>3.3.0.GA</version>
+ <relativePath>../parent/pom.xml</relativePath>
+ </parent>
+
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-proxool</artifactId>
+ <packaging>jar</packaging>
+
+ <name>Hibernate Proxool ConnectionProvider</name>
+ <description>Proxool-based implementation of the Hibernate ConnectionProvder contract</description>
+
+ <dependencies>
+ <dependency>
+ <groupId>${groupId}</groupId>
+ <artifactId>hibernate-core</artifactId>
+ <version>${version}</version>
+ </dependency>
+ <dependency>
+ <groupId>proxool</groupId>
+ <artifactId>proxool</artifactId>
+ <version>0.8.3</version>
+ </dependency>
+ </dependencies>
+</project>
\ No newline at end of file
Deleted: core/tags/hibernate-3.3.0.GA/core/pom.xml
===================================================================
--- core/branches/Branch_3_3/core/pom.xml 2008-08-14 15:58:54 UTC (rev 15071)
+++ core/tags/hibernate-3.3.0.GA/core/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
@@ -1,138 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-parent</artifactId>
- <version>3.3.0-SNAPSHOT</version>
- <relativePath>../parent/pom.xml</relativePath>
- </parent>
-
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-core</artifactId>
- <packaging>jar</packaging>
-
- <name>Hibernate Core</name>
- <description>The core functionality of Hibernate</description>
-
- <dependencies>
- <dependency>
- <groupId>antlr</groupId>
- <artifactId>antlr</artifactId>
- </dependency>
- <dependency>
- <groupId>commons-collections</groupId>
- <artifactId>commons-collections</artifactId>
- </dependency>
- <dependency>
- <groupId>dom4j</groupId>
- <artifactId>dom4j</artifactId>
- </dependency>
-
- <dependency>
- <!-- YUCK, YUCK, YUCK!!!! -->
- <groupId>javax.transaction</groupId>
- <artifactId>jta</artifactId>
- <version>1.1</version>
- </dependency>
- <dependency>
- <groupId>javax.security</groupId>
- <artifactId>jaas</artifactId>
- <version>1.0.01</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>javax.security</groupId>
- <artifactId>jacc</artifactId>
- <version>1.0</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>ant</groupId>
- <artifactId>ant</artifactId>
- <version>1.6.5</version>
- <scope>provided</scope>
- </dependency>
-
- <!-- optional deps for bytecode providers until those are finally properly scoped -->
- <dependency>
- <groupId>javassist</groupId>
- <artifactId>javassist</artifactId>
- <version>3.4.GA</version>
- <optional>true</optional>
- </dependency>
- <dependency>
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-cglib-repack</artifactId>
- <version>2.1_3</version>
- <optional>true</optional>
- </dependency>
- </dependencies>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>antlr-maven-plugin</artifactId>
- <version>${antlrPluginVersion}</version>
- <configuration>
- <grammars>hql.g,hql-sql.g,sql-gen.g</grammars>
- </configuration>
- <executions>
- <execution>
- <goals>
- <goal>generate</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
-
- <reporting>
- <plugins>
- <plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>antlr-maven-plugin</artifactId>
- <version>${antlrPluginVersion}</version>
- <configuration>
- <!-- eventually should be based on the second phase grammar -->
- <grammars>hql.g</grammars>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-javadoc-plugin</artifactId>
- <configuration>
- <!--
- for the time being, gonna ignore the custom stylesheet (what did it do anyway???)
- <stylesheetfile>xyz</stylesheetfile>
- -->
- <groups>
- <group>
- <title>Core API</title>
- <packages>org.hibernate:org.hibernate.classic:org.hibernate.criterion:org.hibernate.metadata:org.hibernate.cfg:org.hibernate.usertype</packages>
- </group>
- <group>
- <title>Extension API</title>
- <packages>org.hibernate.id:org.hibernate.connection:org.hibernate.transaction:org.hibernate.type:org.hibernate.dialect*:org.hibernate.cache*:org.hibernate.event*:org.hibernate.action:org.hibernate.property:org.hibernate.loader*:org.hibernate.persister*:org.hibernate.proxy:org.hibernate.tuple:org.hibernate.transform:org.hibernate.collection:org.hibernate.jdbc</packages>
- </group>
- <group>
- <title>Miscellaneous API</title>
- <packages>org.hibernate.stat:org.hibernate.tool.hbm2ddl:org.hibernate.jmx:org.hibernate.mapping:org.hibernate.tool.instrument</packages>
- </group>
- <group>
- <title>Internal Implementation</title>
- <packages>org.hibernate.engine:org.hibernate.impl:org.hibernate.sql:org.hibernate.lob:org.hibernate.util:org.hibernate.exception:org.hibernate.hql:org.hibernate.hql.ast:org.hibernate.hql.antlr:org.hibernate.hql.classic:org.hibernate.intercept:org.hibernate.secure:org.hibernate.pretty</packages>
- </group>
- </groups>
- </configuration>
- </plugin>
- </plugins>
- </reporting>
-
- <properties>
- <antlrPluginVersion>2.1</antlrPluginVersion>
- </properties>
-</project>
\ No newline at end of file
Copied: core/tags/hibernate-3.3.0.GA/core/pom.xml (from rev 15083, core/branches/Branch_3_3/core/pom.xml)
===================================================================
--- core/tags/hibernate-3.3.0.GA/core/pom.xml (rev 0)
+++ core/tags/hibernate-3.3.0.GA/core/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
@@ -0,0 +1,138 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-parent</artifactId>
+ <version>3.3.0.GA</version>
+ <relativePath>../parent/pom.xml</relativePath>
+ </parent>
+
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-core</artifactId>
+ <packaging>jar</packaging>
+
+ <name>Hibernate Core</name>
+ <description>The core functionality of Hibernate</description>
+
+ <dependencies>
+ <dependency>
+ <groupId>antlr</groupId>
+ <artifactId>antlr</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>commons-collections</groupId>
+ <artifactId>commons-collections</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>dom4j</groupId>
+ <artifactId>dom4j</artifactId>
+ </dependency>
+
+ <dependency>
+ <!-- YUCK, YUCK, YUCK!!!! -->
+ <groupId>javax.transaction</groupId>
+ <artifactId>jta</artifactId>
+ <version>1.1</version>
+ </dependency>
+ <dependency>
+ <groupId>javax.security</groupId>
+ <artifactId>jaas</artifactId>
+ <version>1.0.01</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>javax.security</groupId>
+ <artifactId>jacc</artifactId>
+ <version>1.0</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>ant</groupId>
+ <artifactId>ant</artifactId>
+ <version>1.6.5</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <!-- optional deps for bytecode providers until those are finally properly scoped -->
+ <dependency>
+ <groupId>javassist</groupId>
+ <artifactId>javassist</artifactId>
+ <version>3.4.GA</version>
+ <optional>true</optional>
+ </dependency>
+ <dependency>
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-cglib-repack</artifactId>
+ <version>2.1_3</version>
+ <optional>true</optional>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>antlr-maven-plugin</artifactId>
+ <version>${antlrPluginVersion}</version>
+ <configuration>
+ <grammars>hql.g,hql-sql.g,sql-gen.g</grammars>
+ </configuration>
+ <executions>
+ <execution>
+ <goals>
+ <goal>generate</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+ <reporting>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>antlr-maven-plugin</artifactId>
+ <version>${antlrPluginVersion}</version>
+ <configuration>
+ <!-- eventually should be based on the second phase grammar -->
+ <grammars>hql.g</grammars>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <configuration>
+ <!--
+ for the time being, gonna ignore the custom stylesheet (what did it do anyway???)
+ <stylesheetfile>xyz</stylesheetfile>
+ -->
+ <groups>
+ <group>
+ <title>Core API</title>
+ <packages>org.hibernate:org.hibernate.classic:org.hibernate.criterion:org.hibernate.metadata:org.hibernate.cfg:org.hibernate.usertype</packages>
+ </group>
+ <group>
+ <title>Extension API</title>
+ <packages>org.hibernate.id:org.hibernate.connection:org.hibernate.transaction:org.hibernate.type:org.hibernate.dialect*:org.hibernate.cache*:org.hibernate.event*:org.hibernate.action:org.hibernate.property:org.hibernate.loader*:org.hibernate.persister*:org.hibernate.proxy:org.hibernate.tuple:org.hibernate.transform:org.hibernate.collection:org.hibernate.jdbc</packages>
+ </group>
+ <group>
+ <title>Miscellaneous API</title>
+ <packages>org.hibernate.stat:org.hibernate.tool.hbm2ddl:org.hibernate.jmx:org.hibernate.mapping:org.hibernate.tool.instrument</packages>
+ </group>
+ <group>
+ <title>Internal Implementation</title>
+ <packages>org.hibernate.engine:org.hibernate.impl:org.hibernate.sql:org.hibernate.lob:org.hibernate.util:org.hibernate.exception:org.hibernate.hql:org.hibernate.hql.ast:org.hibernate.hql.antlr:org.hibernate.hql.classic:org.hibernate.intercept:org.hibernate.secure:org.hibernate.pretty</packages>
+ </group>
+ </groups>
+ </configuration>
+ </plugin>
+ </plugins>
+ </reporting>
+
+ <properties>
+ <antlrPluginVersion>2.1</antlrPluginVersion>
+ </properties>
+</project>
\ No newline at end of file
Deleted: core/tags/hibernate-3.3.0.GA/distribution/pom.xml
===================================================================
--- core/branches/Branch_3_3/distribution/pom.xml 2008-08-14 15:58:54 UTC (rev 15071)
+++ core/tags/hibernate-3.3.0.GA/distribution/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
@@ -1,171 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- ~ Hibernate, Relational Persistence for Idiomatic Java
- ~
- ~ Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
- ~ indicated by the @author tags or express copyright attribution
- ~ statements applied by the authors. All third-party contributions are
- ~ distributed under license by Red Hat Middleware LLC.
- ~
- ~ This copyrighted material is made available to anyone wishing to use, modify,
- ~ copy, or redistribute it subject to the terms and conditions of the GNU
- ~ Lesser General Public License, as published by the Free Software Foundation.
- ~
- ~ This program is distributed in the hope that it will be useful,
- ~ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- ~ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
- ~ for more details.
- ~
- ~ You should have received a copy of the GNU Lesser General Public License
- ~ along with this distribution; if not, write to:
- ~ Free Software Foundation, Inc.
- ~ 51 Franklin Street, Fifth Floor
- ~ Boston, MA 02110-1301 USA
- ~
- -->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-parent</artifactId>
- <version>3.3.0-SNAPSHOT</version>
- <relativePath>../parent/pom.xml</relativePath>
- </parent>
-
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-distribution</artifactId>
- <packaging>pom</packaging>
-
- <name>Hibernate Distribution</name>
- <description>Builds the complete Hibernate distribution bundles</description>
-
- <build>
- <pluginManagement>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-assembly-plugin</artifactId>
- <version>2.2-beta-2</version>
- <configuration>
- <descriptors>
- <descriptor>src/assembly/hibernate-all.xml</descriptor>
- <descriptor>src/assembly/dist.xml</descriptor>
- </descriptors>
- </configuration>
- </plugin>
- </plugins>
- </pluginManagement>
- </build>
-
- <!--
- The assemblies work off of dependency sets since the stuff to be
- aggregated is no longer sub-modules after moving assembly itself
- into this 'distribution' module.
- -->
- <dependencies>
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>hibernate-core</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>hibernate-jmx</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>hibernate-ehcache</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>hibernate-jbosscache</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>hibernate-jbosscache2</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>hibernate-oscache</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>hibernate-swarmcache</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>hibernate-c3p0</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>hibernate-proxool</artifactId>
- <version>${project.version}</version>
- </dependency>
-
- <!-- optional deps for bytecode providers since they are optional on core -->
- <dependency>
- <groupId>javassist</groupId>
- <artifactId>javassist</artifactId>
- <version>3.4.GA</version>
- <optional>true</optional>
- </dependency>
- <dependency>
- <groupId>cglib</groupId>
- <artifactId>cglib</artifactId>
- <version>2.1_3</version>
- <optional>true</optional>
- </dependency>
- <dependency>
- <groupId>asm</groupId>
- <artifactId>asm-attrs</artifactId>
- <version>1.5.3</version>
- <optional>true</optional>
- </dependency>
- </dependencies>
-
- <profiles>
- <profile>
- <!--
- A profile used implicitly by the release plugin. Here we use
- it to implicitly execute assembly building when deploy is executed
- as part of release ( I think/hope :p )
- -->
- <id>release-profile</id>
- <activation>
- <property>
- <name>performRelease</name>
- <value>true</value>
- </property>
- </activation>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-assembly-plugin</artifactId>
- <version>2.2-beta-2</version>
- <executions>
- <execution>
- <phase>deploy</phase>
- <goals>
- <goal>single</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
- </profile>
- </profiles>
-
-</project>
\ No newline at end of file
Copied: core/tags/hibernate-3.3.0.GA/distribution/pom.xml (from rev 15083, core/branches/Branch_3_3/distribution/pom.xml)
===================================================================
--- core/tags/hibernate-3.3.0.GA/distribution/pom.xml (rev 0)
+++ core/tags/hibernate-3.3.0.GA/distribution/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ ~ Hibernate, Relational Persistence for Idiomatic Java
+ ~
+ ~ Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
+ ~ indicated by the @author tags or express copyright attribution
+ ~ statements applied by the authors. All third-party contributions are
+ ~ distributed under license by Red Hat Middleware LLC.
+ ~
+ ~ This copyrighted material is made available to anyone wishing to use, modify,
+ ~ copy, or redistribute it subject to the terms and conditions of the GNU
+ ~ Lesser General Public License, as published by the Free Software Foundation.
+ ~
+ ~ This program is distributed in the hope that it will be useful,
+ ~ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ ~ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
+ ~ for more details.
+ ~
+ ~ You should have received a copy of the GNU Lesser General Public License
+ ~ along with this distribution; if not, write to:
+ ~ Free Software Foundation, Inc.
+ ~ 51 Franklin Street, Fifth Floor
+ ~ Boston, MA 02110-1301 USA
+ ~
+ -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-parent</artifactId>
+ <version>3.3.0.GA</version>
+ <relativePath>../parent/pom.xml</relativePath>
+ </parent>
+
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-distribution</artifactId>
+ <packaging>pom</packaging>
+
+ <name>Hibernate Distribution</name>
+ <description>Builds the complete Hibernate distribution bundles</description>
+
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <version>2.2-beta-2</version>
+ <configuration>
+ <descriptors>
+ <descriptor>src/assembly/hibernate-all.xml</descriptor>
+ <descriptor>src/assembly/dist.xml</descriptor>
+ </descriptors>
+ </configuration>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+
+ <!--
+ The assemblies work off of dependency sets since the stuff to be
+ aggregated is no longer sub-modules after moving assembly itself
+ into this 'distribution' module.
+ -->
+ <dependencies>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>hibernate-core</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>hibernate-jmx</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>hibernate-ehcache</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>hibernate-jbosscache</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>hibernate-jbosscache2</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>hibernate-oscache</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>hibernate-swarmcache</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>hibernate-c3p0</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>hibernate-proxool</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+
+ <!-- optional deps for bytecode providers since they are optional on core -->
+ <dependency>
+ <groupId>javassist</groupId>
+ <artifactId>javassist</artifactId>
+ <version>3.4.GA</version>
+ <optional>true</optional>
+ </dependency>
+ <dependency>
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-cglib-repack</artifactId>
+ <version>2.1_3</version>
+ <optional>true</optional>
+ </dependency>
+ </dependencies>
+
+ <profiles>
+ <profile>
+ <!--
+ A profile used implicitly by the release plugin. Here we use
+ it to implicitly execute assembly building when deploy is executed
+ as part of release ( I think/hope :p )
+ -->
+ <id>release-profile</id>
+ <activation>
+ <property>
+ <name>performRelease</name>
+ <value>true</value>
+ </property>
+ </activation>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <version>2.2-beta-2</version>
+ <executions>
+ <execution>
+ <phase>deploy</phase>
+ <goals>
+ <goal>single</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+
+</project>
Deleted: core/tags/hibernate-3.3.0.GA/documentation/manual/pom.xml
===================================================================
--- core/branches/Branch_3_3/documentation/manual/pom.xml 2008-08-14 15:58:54 UTC (rev 15071)
+++ core/tags/hibernate-3.3.0.GA/documentation/manual/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
@@ -1,101 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-parent</artifactId>
- <version>3.3.0-SNAPSHOT</version>
- <relativePath>../../parent/pom.xml</relativePath>
- </parent>
-
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-manual</artifactId>
- <packaging>jdocbook</packaging>
-
- <name>Hibernate Manual</name>
- <description>The Hibernate reference manual</description>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.jboss.maven.plugins</groupId>
- <artifactId>maven-jdocbook-plugin</artifactId>
- <version>2.1.2</version>
- <extensions>true</extensions>
- <executions>
- <execution>
- <!--
- here we are attaching the translate goal so that the translations are processed
- before compilation so that the transated XML is also transformed during
- generation
- -->
- <phase>process-resources</phase>
- <goals>
- <goal>translate</goal>
- </goals>
- </execution>
- </executions>
- <dependencies>
- <dependency>
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-jdocbook-style</artifactId>
- <version>1.0.2</version>
- <type>jdocbook-style</type>
- </dependency>
- </dependencies>
- <configuration>
- <sourceDocumentName>Hibernate_Reference.xml</sourceDocumentName>
- <masterTranslation>en-US</masterTranslation>
- <translations>
-<!--
- <translation>es-ES</translation>
--->
- <translation>fr-FR</translation>
- <translation>ja-JP</translation>
- <translation>ko-KR</translation>
-<!--
- <translation>pt-BR</translation>
--->
- <translation>zh-CN</translation>
- </translations>
- <imageResource>
- <directory>${basedir}/src/main/docbook/en-US</directory>
- <excludes>
- <exclude>*.xml</exclude>
- <exclude>**/*.xml</exclude>
- <exclude>*.zargo</exclude>
- <exclude>**/*.zargo</exclude>
- </excludes>
- </imageResource>
- <formats>
- <format>
- <formatName>pdf</formatName>
- <stylesheetResource>classpath:/xslt/hibernate/pdf/main-pdf.xsl</stylesheetResource>
- <finalName>hibernate_reference.pdf</finalName>
- <profilingTypeName>two_pass</profilingTypeName>
- </format>
- <format>
- <formatName>html_single</formatName>
- <stylesheetResource>classpath:/xslt/hibernate/html/main-single.xsl</stylesheetResource>
- <finalName>index.html</finalName>
- <profilingTypeName>two_pass</profilingTypeName>
- </format>
- <format>
- <formatName>html</formatName>
- <stylesheetResource>classpath:/xslt/hibernate/html/main-chunk.xsl</stylesheetResource>
- <finalName>index.html</finalName>
- <profilingTypeName>two_pass</profilingTypeName>
- </format>
- </formats>
- <options>
- <xincludeSupported>true</xincludeSupported>
- <localeSeparator>-</localeSeparator>
- <useRelativeImageUris>false</useRelativeImageUris>
- </options>
- </configuration>
- </plugin>
- </plugins>
- </build>
-
-</project>
\ No newline at end of file
Copied: core/tags/hibernate-3.3.0.GA/documentation/manual/pom.xml (from rev 15083, core/branches/Branch_3_3/documentation/manual/pom.xml)
===================================================================
--- core/tags/hibernate-3.3.0.GA/documentation/manual/pom.xml (rev 0)
+++ core/tags/hibernate-3.3.0.GA/documentation/manual/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
@@ -0,0 +1,101 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-parent</artifactId>
+ <version>3.3.0.GA</version>
+ <relativePath>../../parent/pom.xml</relativePath>
+ </parent>
+
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-manual</artifactId>
+ <packaging>jdocbook</packaging>
+
+ <name>Hibernate Manual</name>
+ <description>The Hibernate reference manual</description>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.jboss.maven.plugins</groupId>
+ <artifactId>maven-jdocbook-plugin</artifactId>
+ <version>2.1.2</version>
+ <extensions>true</extensions>
+ <executions>
+ <execution>
+ <!--
+ here we are attaching the translate goal so that the translations are processed
+ before compilation so that the transated XML is also transformed during
+ generation
+ -->
+ <phase>process-resources</phase>
+ <goals>
+ <goal>translate</goal>
+ </goals>
+ </execution>
+ </executions>
+ <dependencies>
+ <dependency>
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-jdocbook-style</artifactId>
+ <version>1.0.2</version>
+ <type>jdocbook-style</type>
+ </dependency>
+ </dependencies>
+ <configuration>
+ <sourceDocumentName>Hibernate_Reference.xml</sourceDocumentName>
+ <masterTranslation>en-US</masterTranslation>
+ <translations>
+<!--
+ <translation>es-ES</translation>
+-->
+ <translation>fr-FR</translation>
+ <translation>ja-JP</translation>
+ <translation>ko-KR</translation>
+<!--
+ <translation>pt-BR</translation>
+-->
+ <translation>zh-CN</translation>
+ </translations>
+ <imageResource>
+ <directory>${basedir}/src/main/docbook/en-US</directory>
+ <excludes>
+ <exclude>*.xml</exclude>
+ <exclude>**/*.xml</exclude>
+ <exclude>*.zargo</exclude>
+ <exclude>**/*.zargo</exclude>
+ </excludes>
+ </imageResource>
+ <formats>
+ <format>
+ <formatName>pdf</formatName>
+ <stylesheetResource>classpath:/xslt/hibernate/pdf/main-pdf.xsl</stylesheetResource>
+ <finalName>hibernate_reference.pdf</finalName>
+ <profilingTypeName>two_pass</profilingTypeName>
+ </format>
+ <format>
+ <formatName>html_single</formatName>
+ <stylesheetResource>classpath:/xslt/hibernate/html/main-single.xsl</stylesheetResource>
+ <finalName>index.html</finalName>
+ <profilingTypeName>two_pass</profilingTypeName>
+ </format>
+ <format>
+ <formatName>html</formatName>
+ <stylesheetResource>classpath:/xslt/hibernate/html/main-chunk.xsl</stylesheetResource>
+ <finalName>index.html</finalName>
+ <profilingTypeName>two_pass</profilingTypeName>
+ </format>
+ </formats>
+ <options>
+ <xincludeSupported>true</xincludeSupported>
+ <localeSeparator>-</localeSeparator>
+ <useRelativeImageUris>false</useRelativeImageUris>
+ </options>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
\ No newline at end of file
Deleted: core/tags/hibernate-3.3.0.GA/documentation/pom.xml
===================================================================
--- core/branches/Branch_3_3/documentation/pom.xml 2008-08-14 15:58:54 UTC (rev 15071)
+++ core/tags/hibernate-3.3.0.GA/documentation/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
@@ -1,27 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-parent</artifactId>
- <version>3.3.0-SNAPSHOT</version>
- <relativePath>../parent/pom.xml</relativePath>
- </parent>
-
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-documentation</artifactId>
- <packaging>pom</packaging>
-
- <name>Hibernate Core - Documentation</name>
- <description>Grouping of Hibernate Core Project documentation modules</description>
-
- <modules>
- <module>releasenotes</module>
- <module>manual</module>
-<!--
- <module>jbosscache2</module>
--->
- </modules>
-
-</project>
\ No newline at end of file
Copied: core/tags/hibernate-3.3.0.GA/documentation/pom.xml (from rev 15083, core/branches/Branch_3_3/documentation/pom.xml)
===================================================================
--- core/tags/hibernate-3.3.0.GA/documentation/pom.xml (rev 0)
+++ core/tags/hibernate-3.3.0.GA/documentation/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
@@ -0,0 +1,27 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-parent</artifactId>
+ <version>3.3.0.GA</version>
+ <relativePath>../parent/pom.xml</relativePath>
+ </parent>
+
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-documentation</artifactId>
+ <packaging>pom</packaging>
+
+ <name>Hibernate Core - Documentation</name>
+ <description>Grouping of Hibernate Core Project documentation modules</description>
+
+ <modules>
+ <module>releasenotes</module>
+ <module>manual</module>
+<!--
+ <module>jbosscache2</module>
+-->
+ </modules>
+
+</project>
\ No newline at end of file
Deleted: core/tags/hibernate-3.3.0.GA/documentation/releasenotes/pom.xml
===================================================================
--- core/branches/Branch_3_3/documentation/releasenotes/pom.xml 2008-08-14 15:58:54 UTC (rev 15071)
+++ core/tags/hibernate-3.3.0.GA/documentation/releasenotes/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
@@ -1,87 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-parent</artifactId>
- <version>3.3.0-SNAPSHOT</version>
- <relativePath>../../parent/pom.xml</relativePath>
- </parent>
-
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-releasenotes</artifactId>
- <packaging>jdocbook</packaging>
-
- <name>Hibernate Release Notes</name>
- <description>The Hibernate release notes DocBook source module</description>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.jboss.maven.plugins</groupId>
- <artifactId>maven-jdocbook-plugin</artifactId>
- <version>2.1.0</version>
- <extensions>true</extensions>
- <executions>
- <execution>
- <!--
- here we are attaching the translate goal so that the translations are processed
- before compilation so that the transated XML is also transformed during
- generation
- -->
- <phase>process-resources</phase>
- <goals>
- <goal>translate</goal>
- </goals>
- </execution>
- </executions>
- <dependencies>
- <dependency>
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-jdocbook-style</artifactId>
- <version>1.0.2</version>
- <type>jdocbook-style</type>
- </dependency>
- </dependencies>
- <configuration>
- <sourceDocumentName>en-US/Release_Notes.xml</sourceDocumentName>
- <masterTranslation>en-US</masterTranslation>
- <imageResource>
- <directory>${basedir}/src/main/docbook/en-US</directory>
- <includes>
- <include>**/*.svg</include>
- <include>**/*.png</include>
- </includes>
- </imageResource>
- <formats>
- <format>
- <formatName>pdf</formatName>
- <stylesheetResource>classpath:/xslt/hibernate/pdf/main-pdf.xsl</stylesheetResource>
- <finalName>Release_Notes.pdf</finalName>
- <profilingTypeName>two_pass</profilingTypeName>
- </format>
- <format>
- <formatName>html_single</formatName>
- <stylesheetResource>classpath:/xslt/hibernate/html/main-single.xsl</stylesheetResource>
- <finalName>index.html</finalName>
- <profilingTypeName>two_pass</profilingTypeName>
- </format>
- <format>
- <formatName>html</formatName>
- <stylesheetResource>classpath:/xslt/hibernate/html/main-chunk.xsl</stylesheetResource>
- <finalName>index.html</finalName>
- <profilingTypeName>two_pass</profilingTypeName>
- </format>
- </formats>
- <options>
- <xincludeSupported>true</xincludeSupported>
- <localeSeparator>-</localeSeparator>
- <useRelativeImageUris>true</useRelativeImageUris>
- </options>
- </configuration>
- </plugin>
- </plugins>
- </build>
-
-</project>
\ No newline at end of file
Copied: core/tags/hibernate-3.3.0.GA/documentation/releasenotes/pom.xml (from rev 15083, core/branches/Branch_3_3/documentation/releasenotes/pom.xml)
===================================================================
--- core/tags/hibernate-3.3.0.GA/documentation/releasenotes/pom.xml (rev 0)
+++ core/tags/hibernate-3.3.0.GA/documentation/releasenotes/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
@@ -0,0 +1,87 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-parent</artifactId>
+ <version>3.3.0.GA</version>
+ <relativePath>../../parent/pom.xml</relativePath>
+ </parent>
+
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-releasenotes</artifactId>
+ <packaging>jdocbook</packaging>
+
+ <name>Hibernate Release Notes</name>
+ <description>The Hibernate release notes DocBook source module</description>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.jboss.maven.plugins</groupId>
+ <artifactId>maven-jdocbook-plugin</artifactId>
+ <version>2.1.0</version>
+ <extensions>true</extensions>
+ <executions>
+ <execution>
+ <!--
+ here we are attaching the translate goal so that the translations are processed
+ before compilation so that the transated XML is also transformed during
+ generation
+ -->
+ <phase>process-resources</phase>
+ <goals>
+ <goal>translate</goal>
+ </goals>
+ </execution>
+ </executions>
+ <dependencies>
+ <dependency>
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-jdocbook-style</artifactId>
+ <version>1.0.2</version>
+ <type>jdocbook-style</type>
+ </dependency>
+ </dependencies>
+ <configuration>
+ <sourceDocumentName>en-US/Release_Notes.xml</sourceDocumentName>
+ <masterTranslation>en-US</masterTranslation>
+ <imageResource>
+ <directory>${basedir}/src/main/docbook/en-US</directory>
+ <includes>
+ <include>**/*.svg</include>
+ <include>**/*.png</include>
+ </includes>
+ </imageResource>
+ <formats>
+ <format>
+ <formatName>pdf</formatName>
+ <stylesheetResource>classpath:/xslt/hibernate/pdf/main-pdf.xsl</stylesheetResource>
+ <finalName>Release_Notes.pdf</finalName>
+ <profilingTypeName>two_pass</profilingTypeName>
+ </format>
+ <format>
+ <formatName>html_single</formatName>
+ <stylesheetResource>classpath:/xslt/hibernate/html/main-single.xsl</stylesheetResource>
+ <finalName>index.html</finalName>
+ <profilingTypeName>two_pass</profilingTypeName>
+ </format>
+ <format>
+ <formatName>html</formatName>
+ <stylesheetResource>classpath:/xslt/hibernate/html/main-chunk.xsl</stylesheetResource>
+ <finalName>index.html</finalName>
+ <profilingTypeName>two_pass</profilingTypeName>
+ </format>
+ </formats>
+ <options>
+ <xincludeSupported>true</xincludeSupported>
+ <localeSeparator>-</localeSeparator>
+ <useRelativeImageUris>true</useRelativeImageUris>
+ </options>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
\ No newline at end of file
Deleted: core/tags/hibernate-3.3.0.GA/jmx/pom.xml
===================================================================
--- core/branches/Branch_3_3/jmx/pom.xml 2008-08-14 15:58:54 UTC (rev 15071)
+++ core/tags/hibernate-3.3.0.GA/jmx/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
@@ -1,37 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-parent</artifactId>
- <version>3.3.0-SNAPSHOT</version>
- <relativePath>../parent/pom.xml</relativePath>
- </parent>
-
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-jmx</artifactId>
- <packaging>jar</packaging>
-
- <name>Hibernate JMX Module</name>
- <description>Defines Hibernate JMX capabilities</description>
-
- <dependencies>
- <dependency>
- <groupId>${groupId}</groupId>
- <artifactId>hibernate-core</artifactId>
- <version>${version}</version>
- </dependency>
- <!-- logging setup for the test suite -->
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-log4j12</artifactId>
- <version>1.4.2</version>
- </dependency>
- <dependency>
- <groupId>log4j</groupId>
- <artifactId>log4j</artifactId>
- <version>1.2.14</version>
- </dependency>
- </dependencies>
-</project>
\ No newline at end of file
Copied: core/tags/hibernate-3.3.0.GA/jmx/pom.xml (from rev 15083, core/branches/Branch_3_3/jmx/pom.xml)
===================================================================
--- core/tags/hibernate-3.3.0.GA/jmx/pom.xml (rev 0)
+++ core/tags/hibernate-3.3.0.GA/jmx/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
@@ -0,0 +1,37 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-parent</artifactId>
+ <version>3.3.0.GA</version>
+ <relativePath>../parent/pom.xml</relativePath>
+ </parent>
+
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-jmx</artifactId>
+ <packaging>jar</packaging>
+
+ <name>Hibernate JMX Module</name>
+ <description>Defines Hibernate JMX capabilities</description>
+
+ <dependencies>
+ <dependency>
+ <groupId>${groupId}</groupId>
+ <artifactId>hibernate-core</artifactId>
+ <version>${version}</version>
+ </dependency>
+ <!-- logging setup for the test suite -->
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-log4j12</artifactId>
+ <version>1.4.2</version>
+ </dependency>
+ <dependency>
+ <groupId>log4j</groupId>
+ <artifactId>log4j</artifactId>
+ <version>1.2.14</version>
+ </dependency>
+ </dependencies>
+</project>
\ No newline at end of file
Deleted: core/tags/hibernate-3.3.0.GA/parent/pom.xml
===================================================================
--- core/branches/Branch_3_3/parent/pom.xml 2008-08-14 15:58:54 UTC (rev 15071)
+++ core/tags/hibernate-3.3.0.GA/parent/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
@@ -1,333 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- ~ Hibernate, Relational Persistence for Idiomatic Java
- ~
- ~ Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
- ~ indicated by the @author tags or express copyright attribution
- ~ statements applied by the authors. All third-party contributions are
- ~ distributed under license by Red Hat Middleware LLC.
- ~
- ~ This copyrighted material is made available to anyone wishing to use, modify,
- ~ copy, or redistribute it subject to the terms and conditions of the GNU
- ~ Lesser General Public License, as published by the Free Software Foundation.
- ~
- ~ This program is distributed in the hope that it will be useful,
- ~ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- ~ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
- ~ for more details.
- ~
- ~ You should have received a copy of the GNU Lesser General Public License
- ~ along with this distribution; if not, write to:
- ~ Free Software Foundation, Inc.
- ~ 51 Franklin Street, Fifth Floor
- ~ Boston, MA 02110-1301 USA
- ~
- -->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
- <modelVersion>4.0.0</modelVersion>
-
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-parent</artifactId>
- <packaging>pom</packaging>
- <version>3.3.0-SNAPSHOT</version>
-
- <name>Hibernate Core Parent POM</name>
- <description>The base POM for all Hibernate Core modules.</description>
- <url>http://hibernate.org</url>
-
- <organization>
- <name>Hibernate.org</name>
- <url>http://hibernate.org</url>
- </organization>
-
- <licenses>
- <license>
- <name>GNU Lesser General Public License</name>
- <url>http://www.gnu.org/licenses/lgpl-2.1.html</url>
- <comments>See discussion at http://hibernate.org/356.html for more details.</comments>
- <distribution>repo</distribution>
- </license>
- </licenses>
-
- <scm>
- <connection>scm:svn:https://svn.jboss.org/repos/hibernate/core/branches/Branch_3_3</connection>
- <developerConnection>scm:svn:https://svn.jboss.org/repos/hibernate/core/branches/Branch_3_3</developerConnection>
- <url>https://svn.jboss.org/repos/hibernate/core/branches/Branch_3_3</url>
- </scm>
-
- <ciManagement>
- <system>hudson</system>
- <url>http://hudson.jboss.org/hudson/job/hibernate-testsuite/</url>
- <notifiers>
- <notifier>
- <type>mail</type>
- <address>hibernate-dev(a)lists.jboss.org</address>
- </notifier>
- </notifiers>
- </ciManagement>
-
- <issueManagement>
- <system>jira</system>
- <url>http://opensource.atlassian.com/projects/hibernate/browse/HHH</url>
- </issueManagement>
-
- <mailingLists>
- <mailingList>
- <name>Hibernate Announcements</name>
- <post>hibernate-announce(a)lists.jboss.org</post>
- <subscribe>https://lists.jboss.org/mailman/listinfo/hibernate-announce</subscribe>
- <unsubscribe>https://lists.jboss.org/mailman/listinfo/hibernate-announce</unsubscribe>
- <archive>http://lists.jboss.org/pipermail/hibernate-dev/</archive>
- </mailingList>
- <mailingList>
- <name>Hibernate Commit Notificatons</name>
- <post>hibernate-commits(a)lists.jboss.org</post>
- <subscribe>https://lists.jboss.org/mailman/listinfo/hibernate-commits</subscribe>
- <unsubscribe>https://lists.jboss.org/mailman/listinfo/hibernate-commits</unsubscribe>
- <archive>http://lists.jboss.org/pipermail/hibernate-commits/</archive>
- </mailingList>
- <mailingList>
- <name>Hibernate Developers</name>
- <post>hibernate-dev(a)lists.jboss.org</post>
- <subscribe>https://lists.jboss.org/mailman/listinfo/hibernate-dev</subscribe>
- <unsubscribe>https://lists.jboss.org/mailman/listinfo/hibernate-dev</unsubscribe>
- <archive>http://lists.jboss.org/pipermail/hibernate-dev/</archive>
- <otherArchives>
- <otherArchive>http://www.mail-archive.com/hibernate-dev%40lists.jboss.org/index.html</otherArchive>
- </otherArchives>
- </mailingList>
- <mailingList>
- <name>Hibernate Issue Notifications</name>
- <post>hibernate-issues(a)lists.jboss.org</post>
- <subscribe>https://lists.jboss.org/mailman/listinfo/hibernate-issues</subscribe>
- <unsubscribe>https://lists.jboss.org/mailman/listinfo/hibernate-issues</unsubscribe>
- <archive>http://lists.jboss.org/pipermail/hibernate-issues/</archive>
- </mailingList>
- </mailingLists>
-
- <build>
- <plugins>
- <plugin>
- <!-- require at least JDK 1.5 to run the build -->
- <!-- ... -->
- <!-- we need at least Maven 2.0.8 because of a bug fix affecting our antlr usage -->
- <!-- 2.0.8 not released at this time, so I instead say anything greater that 2.0.7 -->
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-enforcer-plugin</artifactId>
- <executions>
- <execution>
- <id>enforce-java</id>
- <goals>
- <goal>enforce</goal>
- </goals>
- <configuration>
- <rules>
- <requireJavaVersion>
- <version>[1.5,)</version>
- </requireJavaVersion>
- <requireMavenVersion>
- <version>(2.0.7,)</version>
- </requireMavenVersion>
- </rules>
- </configuration>
- </execution>
- </executions>
- </plugin>
- <!-- by default, compile to JDK 1.4 compatibility (individual modules and/or user can override) -->
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <configuration>
- <source>1.4</source>
- <target>1.4</target>
- </configuration>
- </plugin>
- <!-- add specification/implementation details to the manifests -->
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-jar-plugin</artifactId>
- <configuration>
- <archive>
- <manifest>
- <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
- <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
- </manifest>
- <manifestEntries>
- <Implementation-URL>${pom.url}</Implementation-URL>
- </manifestEntries>
- </archive>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-surefire-plugin</artifactId>
- <configuration>
- <redirectTestOutputToFile>true</redirectTestOutputToFile>
- </configuration>
- </plugin>
- </plugins>
- <pluginManagement>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-javadoc-plugin</artifactId>
- <version>2.4</version>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-surefire-plugin</artifactId>
- <version>2.4.3</version>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-jar-plugin</artifactId>
- <version>2.1</version>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-enforcer-plugin</artifactId>
- <version>1.0-alpha-3</version>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <version>2.0.2</version>
- </plugin>
- </plugins>
- </pluginManagement>
- <extensions>
- <extension>
- <groupId>org.apache.maven.wagon</groupId>
- <artifactId>wagon-webdav</artifactId>
- <version>1.0-beta-2</version>
- </extension>
- </extensions>
- </build>
-
- <reporting>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-surefire-report-plugin</artifactId>
- <version>2.4.3</version>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-javadoc-plugin</artifactId>
- <configuration>
- <links>
- <link>http://java.sun.com/j2se/1.4.2/docs/api/</link>
- <link>http://java.sun.com/j2ee/1.4/docs/api/</link>
- </links>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-jxr-plugin</artifactId>
- <version>2.1</version>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-pmd-plugin</artifactId>
- <version>2.2</version>
- <configuration>
- <linkXref>true</linkXref>
- <minimumTokens>100</minimumTokens>
- <targetJdk>1.4</targetJdk>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>taglist-maven-plugin</artifactId>
- <version>2.1</version>
- <configuration>
- <tags>
- <tag>@FIXME</tag>
- <tag>@fixme</tag>
- <tag>FIXME</tag>
- <tag>fixme</tag>
- <tag>@TODO</tag>
- <tag>@todo</tag>
- <tag>TODO</tag>
- <tag>todo</tag>
- </tags>
- </configuration>
- </plugin>
- <plugin>
- <!-- Note: aggregate-able, may cause problems if we aggregate jxr and not this because of the xref links -->
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>javancss-maven-plugin</artifactId>
- <version>2.0-beta-2</version>
- </plugin>
- <plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>findbugs-maven-plugin</artifactId>
- <version>1.1.1</version>
- <configuration>
- <onlyAnalyze>org.hibernate.*</onlyAnalyze>
- </configuration>
- </plugin>
- </plugins>
- </reporting>
-
- <dependencies>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-api</artifactId>
- </dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <scope>test</scope>
- </dependency>
- </dependencies>
-
- <dependencyManagement>
- <dependencies>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-api</artifactId>
- <version>1.4.2</version>
- </dependency>
- <dependency>
- <groupId>antlr</groupId>
- <artifactId>antlr</artifactId>
- <version>2.7.6</version>
- </dependency>
- <dependency>
- <groupId>commons-collections</groupId>
- <artifactId>commons-collections</artifactId>
- <version>3.1</version>
- </dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>3.8.1</version>
- </dependency>
- <dependency>
- <groupId>dom4j</groupId>
- <artifactId>dom4j</artifactId>
- <version>1.6.1</version>
- </dependency>
- </dependencies>
- </dependencyManagement>
-
- <distributionManagement>
- <repository>
- <!-- Copy the dist to the local checkout of the JBoss maven2 repo ${maven.repository.root} -->
- <!-- It is anticipated that ${maven.repository.root} be set in user's settings.xml -->
- <!-- todo : replace this with direct svn access once the svnkit providers are available -->
- <id>repository.jboss.org</id>
- <url>file://${maven.repository.root}</url>
- </repository>
- <snapshotRepository>
- <id>snapshots.jboss.org</id>
- <name>JBoss Snapshot Repository</name>
- <url>dav:https://snapshots.jboss.org/maven2</url>
- </snapshotRepository>
- </distributionManagement>
-
-</project>
\ No newline at end of file
Copied: core/tags/hibernate-3.3.0.GA/parent/pom.xml (from rev 15083, core/branches/Branch_3_3/parent/pom.xml)
===================================================================
--- core/tags/hibernate-3.3.0.GA/parent/pom.xml (rev 0)
+++ core/tags/hibernate-3.3.0.GA/parent/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
@@ -0,0 +1,333 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ ~ Hibernate, Relational Persistence for Idiomatic Java
+ ~
+ ~ Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
+ ~ indicated by the @author tags or express copyright attribution
+ ~ statements applied by the authors. All third-party contributions are
+ ~ distributed under license by Red Hat Middleware LLC.
+ ~
+ ~ This copyrighted material is made available to anyone wishing to use, modify,
+ ~ copy, or redistribute it subject to the terms and conditions of the GNU
+ ~ Lesser General Public License, as published by the Free Software Foundation.
+ ~
+ ~ This program is distributed in the hope that it will be useful,
+ ~ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ ~ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
+ ~ for more details.
+ ~
+ ~ You should have received a copy of the GNU Lesser General Public License
+ ~ along with this distribution; if not, write to:
+ ~ Free Software Foundation, Inc.
+ ~ 51 Franklin Street, Fifth Floor
+ ~ Boston, MA 02110-1301 USA
+ ~
+ -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-parent</artifactId>
+ <packaging>pom</packaging>
+ <version>3.3.0.GA</version>
+
+ <name>Hibernate Core Parent POM</name>
+ <description>The base POM for all Hibernate Core modules.</description>
+ <url>http://hibernate.org</url>
+
+ <organization>
+ <name>Hibernate.org</name>
+ <url>http://hibernate.org</url>
+ </organization>
+
+ <licenses>
+ <license>
+ <name>GNU Lesser General Public License</name>
+ <url>http://www.gnu.org/licenses/lgpl-2.1.html</url>
+ <comments>See discussion at http://hibernate.org/356.html for more details.</comments>
+ <distribution>repo</distribution>
+ </license>
+ </licenses>
+
+ <scm>
+ <connection>scm:svn:https://svn.jboss.org/repos/hibernate/core/tags/hibernate-3.3.0.GA</connection>
+ <developerConnection>scm:svn:https://svn.jboss.org/repos/hibernate/core/tags/hibernate-3.3.0.GA</developerConnection>
+ <url>https://svn.jboss.org/repos/hibernate/core/tags/hibernate-3.3.0.GA</url>
+ </scm>
+
+ <ciManagement>
+ <system>hudson</system>
+ <url>http://hudson.jboss.org/hudson/job/hibernate-testsuite/</url>
+ <notifiers>
+ <notifier>
+ <type>mail</type>
+ <address>hibernate-dev(a)lists.jboss.org</address>
+ </notifier>
+ </notifiers>
+ </ciManagement>
+
+ <issueManagement>
+ <system>jira</system>
+ <url>http://opensource.atlassian.com/projects/hibernate/browse/HHH</url>
+ </issueManagement>
+
+ <mailingLists>
+ <mailingList>
+ <name>Hibernate Announcements</name>
+ <post>hibernate-announce(a)lists.jboss.org</post>
+ <subscribe>https://lists.jboss.org/mailman/listinfo/hibernate-announce</subscribe>
+ <unsubscribe>https://lists.jboss.org/mailman/listinfo/hibernate-announce</unsubscribe>
+ <archive>http://lists.jboss.org/pipermail/hibernate-dev/</archive>
+ </mailingList>
+ <mailingList>
+ <name>Hibernate Commit Notificatons</name>
+ <post>hibernate-commits(a)lists.jboss.org</post>
+ <subscribe>https://lists.jboss.org/mailman/listinfo/hibernate-commits</subscribe>
+ <unsubscribe>https://lists.jboss.org/mailman/listinfo/hibernate-commits</unsubscribe>
+ <archive>http://lists.jboss.org/pipermail/hibernate-commits/</archive>
+ </mailingList>
+ <mailingList>
+ <name>Hibernate Developers</name>
+ <post>hibernate-dev(a)lists.jboss.org</post>
+ <subscribe>https://lists.jboss.org/mailman/listinfo/hibernate-dev</subscribe>
+ <unsubscribe>https://lists.jboss.org/mailman/listinfo/hibernate-dev</unsubscribe>
+ <archive>http://lists.jboss.org/pipermail/hibernate-dev/</archive>
+ <otherArchives>
+ <otherArchive>http://www.mail-archive.com/hibernate-dev%40lists.jboss.org/index.html</otherArchive>
+ </otherArchives>
+ </mailingList>
+ <mailingList>
+ <name>Hibernate Issue Notifications</name>
+ <post>hibernate-issues(a)lists.jboss.org</post>
+ <subscribe>https://lists.jboss.org/mailman/listinfo/hibernate-issues</subscribe>
+ <unsubscribe>https://lists.jboss.org/mailman/listinfo/hibernate-issues</unsubscribe>
+ <archive>http://lists.jboss.org/pipermail/hibernate-issues/</archive>
+ </mailingList>
+ </mailingLists>
+
+ <build>
+ <plugins>
+ <plugin>
+ <!-- require at least JDK 1.5 to run the build -->
+ <!-- ... -->
+ <!-- we need at least Maven 2.0.8 because of a bug fix affecting our antlr usage -->
+ <!-- 2.0.8 not released at this time, so I instead say anything greater that 2.0.7 -->
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-enforcer-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>enforce-java</id>
+ <goals>
+ <goal>enforce</goal>
+ </goals>
+ <configuration>
+ <rules>
+ <requireJavaVersion>
+ <version>[1.5,)</version>
+ </requireJavaVersion>
+ <requireMavenVersion>
+ <version>(2.0.7,)</version>
+ </requireMavenVersion>
+ </rules>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <!-- by default, compile to JDK 1.4 compatibility (individual modules and/or user can override) -->
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <source>1.4</source>
+ <target>1.4</target>
+ </configuration>
+ </plugin>
+ <!-- add specification/implementation details to the manifests -->
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <configuration>
+ <archive>
+ <manifest>
+ <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
+ <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
+ </manifest>
+ <manifestEntries>
+ <Implementation-URL>${pom.url}</Implementation-URL>
+ </manifestEntries>
+ </archive>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <redirectTestOutputToFile>true</redirectTestOutputToFile>
+ </configuration>
+ </plugin>
+ </plugins>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <version>2.4</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.4.3</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>2.1</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-enforcer-plugin</artifactId>
+ <version>1.0-alpha-3</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.0.2</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ <extensions>
+ <extension>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-webdav</artifactId>
+ <version>1.0-beta-2</version>
+ </extension>
+ </extensions>
+ </build>
+
+ <reporting>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-report-plugin</artifactId>
+ <version>2.4.3</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <configuration>
+ <links>
+ <link>http://java.sun.com/j2se/1.4.2/docs/api/</link>
+ <link>http://java.sun.com/j2ee/1.4/docs/api/</link>
+ </links>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jxr-plugin</artifactId>
+ <version>2.1</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-pmd-plugin</artifactId>
+ <version>2.2</version>
+ <configuration>
+ <linkXref>true</linkXref>
+ <minimumTokens>100</minimumTokens>
+ <targetJdk>1.4</targetJdk>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>taglist-maven-plugin</artifactId>
+ <version>2.1</version>
+ <configuration>
+ <tags>
+ <tag>@FIXME</tag>
+ <tag>@fixme</tag>
+ <tag>FIXME</tag>
+ <tag>fixme</tag>
+ <tag>@TODO</tag>
+ <tag>@todo</tag>
+ <tag>TODO</tag>
+ <tag>todo</tag>
+ </tags>
+ </configuration>
+ </plugin>
+ <plugin>
+ <!-- Note: aggregate-able, may cause problems if we aggregate jxr and not this because of the xref links -->
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>javancss-maven-plugin</artifactId>
+ <version>2.0-beta-2</version>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>findbugs-maven-plugin</artifactId>
+ <version>1.1.1</version>
+ <configuration>
+ <onlyAnalyze>org.hibernate.*</onlyAnalyze>
+ </configuration>
+ </plugin>
+ </plugins>
+ </reporting>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ <version>1.4.2</version>
+ </dependency>
+ <dependency>
+ <groupId>antlr</groupId>
+ <artifactId>antlr</artifactId>
+ <version>2.7.6</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-collections</groupId>
+ <artifactId>commons-collections</artifactId>
+ <version>3.1</version>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.1</version>
+ </dependency>
+ <dependency>
+ <groupId>dom4j</groupId>
+ <artifactId>dom4j</artifactId>
+ <version>1.6.1</version>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+
+ <distributionManagement>
+ <repository>
+ <!-- Copy the dist to the local checkout of the JBoss maven2 repo ${maven.repository.root} -->
+ <!-- It is anticipated that ${maven.repository.root} be set in user's settings.xml -->
+ <!-- todo : replace this with direct svn access once the svnkit providers are available -->
+ <id>repository.jboss.org</id>
+ <url>file://${maven.repository.root}</url>
+ </repository>
+ <snapshotRepository>
+ <id>snapshots.jboss.org</id>
+ <name>JBoss Snapshot Repository</name>
+ <url>dav:https://snapshots.jboss.org/maven2</url>
+ </snapshotRepository>
+ </distributionManagement>
+
+</project>
\ No newline at end of file
Deleted: core/tags/hibernate-3.3.0.GA/pom.xml
===================================================================
--- core/branches/Branch_3_3/pom.xml 2008-08-14 15:58:54 UTC (rev 15071)
+++ core/tags/hibernate-3.3.0.GA/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
@@ -1,96 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- ~ Hibernate, Relational Persistence for Idiomatic Java
- ~
- ~ Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
- ~ indicated by the @author tags or express copyright attribution
- ~ statements applied by the authors. All third-party contributions are
- ~ distributed under license by Red Hat Middleware LLC.
- ~
- ~ This copyrighted material is made available to anyone wishing to use, modify,
- ~ copy, or redistribute it subject to the terms and conditions of the GNU
- ~ Lesser General Public License, as published by the Free Software Foundation.
- ~
- ~ This program is distributed in the hope that it will be useful,
- ~ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- ~ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
- ~ for more details.
- ~
- ~ You should have received a copy of the GNU Lesser General Public License
- ~ along with this distribution; if not, write to:
- ~ Free Software Foundation, Inc.
- ~ 51 Franklin Street, Fifth Floor
- ~ Boston, MA 02110-1301 USA
- ~
- -->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-parent</artifactId>
- <version>3.3.0-SNAPSHOT</version>
- <relativePath>parent/pom.xml</relativePath>
- </parent>
-
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate</artifactId>
- <packaging>pom</packaging>
-
- <name>Hibernate Core Aggregator</name>
- <description>Aggregator of the Hibernate Core modules.</description>
-
- <modules>
- <module>parent</module>
- <module>core</module>
- <module>cache-ehcache</module>
- <module>cache-jbosscache</module>
- <module>cache-jbosscache2</module>
- <module>cache-oscache</module>
- <module>cache-swarmcache</module>
- <module>connection-c3p0</module>
- <module>connection-proxool</module>
- <module>jmx</module>
- <module>testing</module>
- <module>testsuite</module>
- <module>tutorials</module>
-<!--
- Need to scope bytecode providers first...
- <module>bytecode-cglib</module>
- <module>bytecode-javassist</module>
--->
- </modules>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-release-plugin</artifactId>
- <version>2.0-beta-7</version>
- <configuration>
- <autoVersionSubmodules>true</autoVersionSubmodules>
- </configuration>
- </plugin>
- </plugins>
- </build>
-
- <profiles>
- <profile>
- <id>docs</id>
- <activation>
- <property>
- <name>disableDistribution</name>
- <value>!true</value>
- </property>
- </activation>
- <modules>
- <module>documentation</module>
- <module>distribution</module>
- </modules>
- </profile>
- </profiles>
-
-</project>
\ No newline at end of file
Copied: core/tags/hibernate-3.3.0.GA/pom.xml (from rev 15083, core/branches/Branch_3_3/pom.xml)
===================================================================
--- core/tags/hibernate-3.3.0.GA/pom.xml (rev 0)
+++ core/tags/hibernate-3.3.0.GA/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
@@ -0,0 +1,96 @@
+<?xml version="1.0"?>
+
+<!--
+ ~ Hibernate, Relational Persistence for Idiomatic Java
+ ~
+ ~ Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
+ ~ indicated by the @author tags or express copyright attribution
+ ~ statements applied by the authors. All third-party contributions are
+ ~ distributed under license by Red Hat Middleware LLC.
+ ~
+ ~ This copyrighted material is made available to anyone wishing to use, modify,
+ ~ copy, or redistribute it subject to the terms and conditions of the GNU
+ ~ Lesser General Public License, as published by the Free Software Foundation.
+ ~
+ ~ This program is distributed in the hope that it will be useful,
+ ~ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ ~ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
+ ~ for more details.
+ ~
+ ~ You should have received a copy of the GNU Lesser General Public License
+ ~ along with this distribution; if not, write to:
+ ~ Free Software Foundation, Inc.
+ ~ 51 Franklin Street, Fifth Floor
+ ~ Boston, MA 02110-1301 USA
+ ~
+ -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-parent</artifactId>
+ <version>3.3.0.GA</version>
+ <relativePath>parent/pom.xml</relativePath>
+ </parent>
+
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate</artifactId>
+ <packaging>pom</packaging>
+
+ <name>Hibernate Core Aggregator</name>
+ <description>Aggregator of the Hibernate Core modules.</description>
+
+ <modules>
+ <module>parent</module>
+ <module>core</module>
+ <module>cache-ehcache</module>
+ <module>cache-jbosscache</module>
+ <module>cache-jbosscache2</module>
+ <module>cache-oscache</module>
+ <module>cache-swarmcache</module>
+ <module>connection-c3p0</module>
+ <module>connection-proxool</module>
+ <module>jmx</module>
+ <module>testing</module>
+ <module>testsuite</module>
+ <module>tutorials</module>
+<!--
+ Need to scope bytecode providers first...
+ <module>bytecode-cglib</module>
+ <module>bytecode-javassist</module>
+-->
+ </modules>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-release-plugin</artifactId>
+ <version>2.0-beta-7</version>
+ <configuration>
+ <autoVersionSubmodules>true</autoVersionSubmodules>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+ <profiles>
+ <profile>
+ <id>docs</id>
+ <activation>
+ <property>
+ <name>disableDistribution</name>
+ <value>!true</value>
+ </property>
+ </activation>
+ <modules>
+ <module>documentation</module>
+ <module>distribution</module>
+ </modules>
+ </profile>
+ </profiles>
+
+</project>
\ No newline at end of file
Deleted: core/tags/hibernate-3.3.0.GA/testing/pom.xml
===================================================================
--- core/branches/Branch_3_3/testing/pom.xml 2008-08-14 15:58:54 UTC (rev 15071)
+++ core/tags/hibernate-3.3.0.GA/testing/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
@@ -1,45 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-parent</artifactId>
- <version>3.3.0-SNAPSHOT</version>
- <relativePath>../parent/pom.xml</relativePath>
- </parent>
-
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-testing</artifactId>
- <packaging>jar</packaging>
-
- <name>Hibernate Testing</name>
- <description>Hibernate JUnit test utilities</description>
-
- <dependencies>
- <dependency>
- <groupId>${groupId}</groupId>
- <artifactId>hibernate-core</artifactId>
- <version>${version}</version>
- </dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <!-- here we need to pull JUnit deps into compile scope, as opposed to the normal test scope -->
- <version>3.8.1</version>
- <scope>compile</scope>
- </dependency>
- </dependencies>
-
- <build>
- <resources>
- <resource>
- <filtering>false</filtering>
- <directory>src/main/java</directory>
- <includes>
- <include>**/*.hbm.xml</include>
- </includes>
- </resource>
- </resources>
- </build>
-</project>
\ No newline at end of file
Copied: core/tags/hibernate-3.3.0.GA/testing/pom.xml (from rev 15083, core/branches/Branch_3_3/testing/pom.xml)
===================================================================
--- core/tags/hibernate-3.3.0.GA/testing/pom.xml (rev 0)
+++ core/tags/hibernate-3.3.0.GA/testing/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
@@ -0,0 +1,45 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-parent</artifactId>
+ <version>3.3.0.GA</version>
+ <relativePath>../parent/pom.xml</relativePath>
+ </parent>
+
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-testing</artifactId>
+ <packaging>jar</packaging>
+
+ <name>Hibernate Testing</name>
+ <description>Hibernate JUnit test utilities</description>
+
+ <dependencies>
+ <dependency>
+ <groupId>${groupId}</groupId>
+ <artifactId>hibernate-core</artifactId>
+ <version>${version}</version>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <!-- here we need to pull JUnit deps into compile scope, as opposed to the normal test scope -->
+ <version>3.8.1</version>
+ <scope>compile</scope>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <resources>
+ <resource>
+ <filtering>false</filtering>
+ <directory>src/main/java</directory>
+ <includes>
+ <include>**/*.hbm.xml</include>
+ </includes>
+ </resource>
+ </resources>
+ </build>
+</project>
\ No newline at end of file
Deleted: core/tags/hibernate-3.3.0.GA/testsuite/pom.xml
===================================================================
--- core/branches/Branch_3_3/testsuite/pom.xml 2008-08-14 15:58:54 UTC (rev 15071)
+++ core/tags/hibernate-3.3.0.GA/testsuite/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
@@ -1,353 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-parent</artifactId>
- <version>3.3.0-SNAPSHOT</version>
- <relativePath>../parent/pom.xml</relativePath>
- </parent>
-
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-testsuite</artifactId>
- <packaging>jar</packaging>
-
- <name>Hibernate Testsuite</name>
- <description>The testsuite of Hibernate functionality</description>
-
- <dependencies>
- <dependency>
- <groupId>${groupId}</groupId>
- <artifactId>hibernate-core</artifactId>
- <version>${version}</version>
- </dependency>
- <dependency>
- <groupId>${groupId}</groupId>
- <artifactId>hibernate-testing</artifactId>
- <version>${version}</version>
- </dependency>
- <!-- these are optional on core... :( -->
- <dependency>
- <groupId>javassist</groupId>
- <artifactId>javassist</artifactId>
- <version>3.4.GA</version>
- </dependency>
- <dependency>
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-cglib-repack</artifactId>
- <version>2.1_3</version>
- </dependency>
- <!-- optional dom4j dependency; needed here for dom4j (de)serialization -->
- <dependency>
- <groupId>jaxen</groupId>
- <artifactId>jaxen</artifactId>
- <version>1.1</version>
- </dependency>
- <!-- logging setup for the test suite -->
- <dependency>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging</artifactId>
- <version>99.0-does-not-exist</version>
- </dependency>
- <dependency>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging-api</artifactId>
- <version>99.0-does-not-exist</version>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>jcl104-over-slf4j</artifactId>
- <version>1.4.2</version>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-log4j12</artifactId>
- <version>1.4.2</version>
- </dependency>
- <dependency>
- <groupId>log4j</groupId>
- <artifactId>log4j</artifactId>
- <version>1.2.14</version>
- </dependency>
- </dependencies>
-
- <build>
- <testResources>
- <testResource>
- <filtering>false</filtering>
- <directory>src/test/java</directory>
- <includes>
- <include>**/*.xml</include>
- </includes>
- </testResource>
- <testResource>
- <filtering>true</filtering>
- <directory>src/test/resources</directory>
- </testResource>
- </testResources>
-
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <configuration>
- <source>1.5</source>
- <target>1.5</target>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.jboss.maven.plugins</groupId>
- <artifactId>maven-test-ext-plugin</artifactId>
- <version>1.1.0</version>
- <executions>
- <execution>
- <goals>
- <goal>extend</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-surefire-plugin</artifactId>
- <configuration>
- <systemProperties>
- <property>
- <name>hibernate.test.validatefailureexpected</name>
- <value>true</value>
- </property>
- </systemProperties>
- </configuration>
- </plugin>
- </plugins>
- </build>
-
- <profiles>
- <!-- HSQLDB is the default (eventually move to H2) -->
- <profile>
- <id>hsqldb</id>
- <activation>
- <activeByDefault>true</activeByDefault>
- </activation>
- <dependencies>
- <dependency>
- <groupId>hsqldb</groupId>
- <artifactId>hsqldb</artifactId>
- <version>1.8.0.2</version>
- </dependency>
- </dependencies>
- <properties>
- <db.dialect>org.hibernate.dialect.HSQLDialect</db.dialect>
- <jdbc.driver>org.hsqldb.jdbcDriver</jdbc.driver>
- <jdbc.url>jdbc:hsqldb:target/test/db/hsqldb/hibernate</jdbc.url>
- <jdbc.user>sa</jdbc.user>
- <jdbc.pass />
- <jdbc.isolation />
- </properties>
- </profile>
-
- <!-- The H2 test envionment -->
- <profile>
- <id>h2</id>
- <dependencies>
- <dependency>
- <groupId>org.h2database</groupId>
- <artifactId>h2database</artifactId>
- <version>1.0.20061217</version>
- </dependency>
- </dependencies>
- <properties>
- <db.dialect>org.hibernate.dialect.H2Dialect</db.dialect>
- <jdbc.driver>org.h2.Driver</jdbc.driver>
- <jdbc.url>jdbc:h2:mem:target/test/db/h2/hibernate</jdbc.url>
- <jdbc.user>sa</jdbc.user>
- <jdbc.pass />
- <jdbc.isolation />
- </properties>
- </profile>
-
- <!--
- ###################################################################
- Profiles naming db instances in the Red Hat QA/QE lab
-
- First, those with OSS drivers
- ###################################################################
- -->
-
- <!-- The MySQL5 test envionment -->
- <profile>
- <id>mysql5</id>
- <dependencies>
- <dependency>
- <groupId>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- <version>5.0.5</version>
- </dependency>
- </dependencies>
- <properties>
- <db.dialect>org.hibernate.dialect.MySQL5InnoDBDialect</db.dialect>
- <jdbc.driver>com.mysql.jdbc.Driver</jdbc.driver>
- <jdbc.url>jdbc:mysql://dev02.qa.atl.jboss.com/cruisecontrol</jdbc.url>
- <jdbc.user>cruisecontrol</jdbc.user>
- <jdbc.pass>cruisecontrol</jdbc.pass>
- <jdbc.isolation />
- </properties>
- </profile>
-
- <!-- The PostgreSQL test envionment -->
- <profile>
- <id>pgsql8</id>
- <dependencies>
- <dependency>
- <groupId>postgresql</groupId>
- <artifactId>postgresql</artifactId>
- <version>8.2-504</version>
- <classifier>jdbc3</classifier>
- </dependency>
- </dependencies>
- <properties>
- <db.dialect>org.hibernate.dialect.PostgreSQLDialect</db.dialect>
- <jdbc.driver>org.postgresql.Driver</jdbc.driver>
- <jdbc.url>jdbc:postgresql://dev01.qa.atl.jboss.com:5432:cruisecontrol</jdbc.url>
- <jdbc.user>cruisecontrol</jdbc.user>
- <jdbc.pass>cruisecontrol</jdbc.pass>
- <jdbc.isolation />
- </properties>
- </profile>
-
- <!--
- ###################################################################
- Then, those with commercial drivers
- ###################################################################
- -->
-
- <!-- The Oracle9i test envionment -->
- <profile>
- <id>oracle9i</id>
- <dependencies>
- <dependency>
- <groupId>com.oracle</groupId>
- <artifactId>ojdbc14</artifactId>
- <!-- use the 10g drivers which are surprisingly largely bug free -->
- <version>10.0.2.0</version>
- </dependency>
- </dependencies>
- <properties>
- <db.dialect>org.hibernate.dialect.Oracle9iDialect</db.dialect>
- <jdbc.driver>oracle.jdbc.driver.OracleDriver</jdbc.driver>
- <jdbc.url>jdbc:oracle:thin:@dev20.qa.atl.jboss.com:1521:qa</jdbc.url>
- <jdbc.user>cruisecontrol</jdbc.user>
- <jdbc.pass>cruisecontrol</jdbc.pass>
- <jdbc.isolation />
- </properties>
- </profile>
-
- <!-- The Oracle10g test envionment -->
- <profile>
- <id>oracle10g</id>
- <dependencies>
- <dependency>
- <groupId>com.oracle</groupId>
- <artifactId>ojdbc14</artifactId>
- <!-- use the 10g drivers which are surprisingly largely bug free -->
- <version>10.0.2.0</version>
- </dependency>
- </dependencies>
- <properties>
- <db.dialect>org.hibernate.dialect.Oracle10gDialect</db.dialect>
- <jdbc.driver>oracle.jdbc.driver.OracleDriver</jdbc.driver>
- <jdbc.url>jdbc:oracle:thin:@dev01.qa.atl.jboss.com:1521:qadb01</jdbc.url>
- <jdbc.user>cruisecontrol</jdbc.user>
- <jdbc.pass>cruisecontrol</jdbc.pass>
- <jdbc.isolation />
- </properties>
- </profile>
-
- <!-- The DB2 8.x test envionment (using 9x drivers)-->
- <profile>
- <id>db2-8</id>
- <dependencies>
- <dependency>
- <groupId>com.ibm</groupId>
- <artifactId>db2jcc</artifactId>
- <version>3.1.57</version>
- </dependency>
- <dependency>
- <groupId>com.ibm</groupId>
- <artifactId>db2jcc_license_cu</artifactId>
- <version>3.1.57</version>
- </dependency>
- </dependencies>
- <properties>
- <db.dialect>org.hibernate.dialect.DB2Dialect</db.dialect>
- <jdbc.driver>com.ibm.db2.jcc.DB2Driver</jdbc.driver>
- <jdbc.url>jdbc:db2://dev32.qa.atl.jboss.com:50000/jbossqa</jdbc.url>
- <jdbc.user>hiber</jdbc.user>
- <jdbc.pass>hiber</jdbc.pass>
- <jdbc.isolation />
- </properties>
- </profile>
-
- <!-- The Sybase 12 test envionment -->
- <profile>
- <id>sybase12</id>
- <dependencies>
- <dependency>
- <groupId>com.sybase</groupId>
- <artifactId>jconnect</artifactId>
- <version>6.0.5</version>
- </dependency>
- </dependencies>
- <properties>
- <db.dialect>org.hibernate.dialect.SybaseDialect</db.dialect>
- <jdbc.driver>com.sybase.jdbc3.jdbc.SybDriver</jdbc.driver>
- <jdbc.url>jdbc:sybase:Tds:dev01.qa.atl.jboss.com:4100/cruisecontrol</jdbc.url>
- <jdbc.user>cruisecontrol</jdbc.user>
- <jdbc.pass>cruisecontrol</jdbc.pass>
- <jdbc.isolation />
- </properties>
- </profile>
-
- <!-- The SQLServer2005 (jTDS) test envionment -->
- <profile>
- <id>sqlserver-jtds</id>
- <dependencies>
- <dependency>
- <groupId>net.sourceforge.jtds</groupId>
- <artifactId>jtds</artifactId>
- <version>1.2</version>
- </dependency>
- </dependencies>
- <properties>
- <db.dialect>org.hibernate.dialect.SQLServerDialect</db.dialect>
- <jdbc.driver>net.sourceforge.jtds.jdbc.Driver</jdbc.driver>
- <jdbc.url>jdbc:jtds:sqlserver://dev30.qa.atl.jboss.com:3918/cruisecontrol</jdbc.url>
- <jdbc.user>cruisecontrol</jdbc.user>
- <jdbc.pass>cruisecontrol</jdbc.pass>
- <jdbc.isolation />
- </properties>
- </profile>
-
- <!-- The SQLServer2005 (MS JDBC) test envionment -->
- <profile>
- <id>sqlserver-msjdbc</id>
- <dependencies>
- <dependency>
- <groupId>com.microsoft.sqlserver</groupId>
- <artifactId>msjdbc</artifactId>
- <version>1.1</version>
- </dependency>
- </dependencies>
- <properties>
- <db.dialect>org.hibernate.dialect.SQLServerDialect</db.dialect>
- <jdbc.driver>com.microsoft.sqlserver.jdbc.SQLServerDriver</jdbc.driver>
- <jdbc.url>jdbc:sqlserver://dev30.qa.atl.jboss.com:3918</jdbc.url>
- <jdbc.user>cruisecontrol</jdbc.user>
- <jdbc.pass>cruisecontrol</jdbc.pass>
- <jdbc.isolation>4096</jdbc.isolation>
- </properties>
- </profile>
-
- </profiles>
-</project>
\ No newline at end of file
Copied: core/tags/hibernate-3.3.0.GA/testsuite/pom.xml (from rev 15083, core/branches/Branch_3_3/testsuite/pom.xml)
===================================================================
--- core/tags/hibernate-3.3.0.GA/testsuite/pom.xml (rev 0)
+++ core/tags/hibernate-3.3.0.GA/testsuite/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
@@ -0,0 +1,353 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-parent</artifactId>
+ <version>3.3.0.GA</version>
+ <relativePath>../parent/pom.xml</relativePath>
+ </parent>
+
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-testsuite</artifactId>
+ <packaging>jar</packaging>
+
+ <name>Hibernate Testsuite</name>
+ <description>The testsuite of Hibernate functionality</description>
+
+ <dependencies>
+ <dependency>
+ <groupId>${groupId}</groupId>
+ <artifactId>hibernate-core</artifactId>
+ <version>${version}</version>
+ </dependency>
+ <dependency>
+ <groupId>${groupId}</groupId>
+ <artifactId>hibernate-testing</artifactId>
+ <version>${version}</version>
+ </dependency>
+ <!-- these are optional on core... :( -->
+ <dependency>
+ <groupId>javassist</groupId>
+ <artifactId>javassist</artifactId>
+ <version>3.4.GA</version>
+ </dependency>
+ <dependency>
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-cglib-repack</artifactId>
+ <version>2.1_3</version>
+ </dependency>
+ <!-- optional dom4j dependency; needed here for dom4j (de)serialization -->
+ <dependency>
+ <groupId>jaxen</groupId>
+ <artifactId>jaxen</artifactId>
+ <version>1.1</version>
+ </dependency>
+ <!-- logging setup for the test suite -->
+ <dependency>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ <version>99.0-does-not-exist</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging-api</artifactId>
+ <version>99.0-does-not-exist</version>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>jcl104-over-slf4j</artifactId>
+ <version>1.4.2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-log4j12</artifactId>
+ <version>1.4.2</version>
+ </dependency>
+ <dependency>
+ <groupId>log4j</groupId>
+ <artifactId>log4j</artifactId>
+ <version>1.2.14</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <testResources>
+ <testResource>
+ <filtering>false</filtering>
+ <directory>src/test/java</directory>
+ <includes>
+ <include>**/*.xml</include>
+ </includes>
+ </testResource>
+ <testResource>
+ <filtering>true</filtering>
+ <directory>src/test/resources</directory>
+ </testResource>
+ </testResources>
+
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <source>1.5</source>
+ <target>1.5</target>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.jboss.maven.plugins</groupId>
+ <artifactId>maven-test-ext-plugin</artifactId>
+ <version>1.1.0</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>extend</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <systemProperties>
+ <property>
+ <name>hibernate.test.validatefailureexpected</name>
+ <value>true</value>
+ </property>
+ </systemProperties>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+ <profiles>
+ <!-- HSQLDB is the default (eventually move to H2) -->
+ <profile>
+ <id>hsqldb</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ </activation>
+ <dependencies>
+ <dependency>
+ <groupId>hsqldb</groupId>
+ <artifactId>hsqldb</artifactId>
+ <version>1.8.0.2</version>
+ </dependency>
+ </dependencies>
+ <properties>
+ <db.dialect>org.hibernate.dialect.HSQLDialect</db.dialect>
+ <jdbc.driver>org.hsqldb.jdbcDriver</jdbc.driver>
+ <jdbc.url>jdbc:hsqldb:target/test/db/hsqldb/hibernate</jdbc.url>
+ <jdbc.user>sa</jdbc.user>
+ <jdbc.pass />
+ <jdbc.isolation />
+ </properties>
+ </profile>
+
+ <!-- The H2 test envionment -->
+ <profile>
+ <id>h2</id>
+ <dependencies>
+ <dependency>
+ <groupId>org.h2database</groupId>
+ <artifactId>h2database</artifactId>
+ <version>1.0.20061217</version>
+ </dependency>
+ </dependencies>
+ <properties>
+ <db.dialect>org.hibernate.dialect.H2Dialect</db.dialect>
+ <jdbc.driver>org.h2.Driver</jdbc.driver>
+ <jdbc.url>jdbc:h2:mem:target/test/db/h2/hibernate</jdbc.url>
+ <jdbc.user>sa</jdbc.user>
+ <jdbc.pass />
+ <jdbc.isolation />
+ </properties>
+ </profile>
+
+ <!--
+ ###################################################################
+ Profiles naming db instances in the Red Hat QA/QE lab
+
+ First, those with OSS drivers
+ ###################################################################
+ -->
+
+ <!-- The MySQL5 test envionment -->
+ <profile>
+ <id>mysql5</id>
+ <dependencies>
+ <dependency>
+ <groupId>mysql</groupId>
+ <artifactId>mysql-connector-java</artifactId>
+ <version>5.0.5</version>
+ </dependency>
+ </dependencies>
+ <properties>
+ <db.dialect>org.hibernate.dialect.MySQL5InnoDBDialect</db.dialect>
+ <jdbc.driver>com.mysql.jdbc.Driver</jdbc.driver>
+ <jdbc.url>jdbc:mysql://dev02.qa.atl.jboss.com/cruisecontrol</jdbc.url>
+ <jdbc.user>cruisecontrol</jdbc.user>
+ <jdbc.pass>cruisecontrol</jdbc.pass>
+ <jdbc.isolation />
+ </properties>
+ </profile>
+
+ <!-- The PostgreSQL test envionment -->
+ <profile>
+ <id>pgsql8</id>
+ <dependencies>
+ <dependency>
+ <groupId>postgresql</groupId>
+ <artifactId>postgresql</artifactId>
+ <version>8.2-504</version>
+ <classifier>jdbc3</classifier>
+ </dependency>
+ </dependencies>
+ <properties>
+ <db.dialect>org.hibernate.dialect.PostgreSQLDialect</db.dialect>
+ <jdbc.driver>org.postgresql.Driver</jdbc.driver>
+ <jdbc.url>jdbc:postgresql://dev01.qa.atl.jboss.com:5432:cruisecontrol</jdbc.url>
+ <jdbc.user>cruisecontrol</jdbc.user>
+ <jdbc.pass>cruisecontrol</jdbc.pass>
+ <jdbc.isolation />
+ </properties>
+ </profile>
+
+ <!--
+ ###################################################################
+ Then, those with commercial drivers
+ ###################################################################
+ -->
+
+ <!-- The Oracle9i test envionment -->
+ <profile>
+ <id>oracle9i</id>
+ <dependencies>
+ <dependency>
+ <groupId>com.oracle</groupId>
+ <artifactId>ojdbc14</artifactId>
+ <!-- use the 10g drivers which are surprisingly largely bug free -->
+ <version>10.0.2.0</version>
+ </dependency>
+ </dependencies>
+ <properties>
+ <db.dialect>org.hibernate.dialect.Oracle9iDialect</db.dialect>
+ <jdbc.driver>oracle.jdbc.driver.OracleDriver</jdbc.driver>
+ <jdbc.url>jdbc:oracle:thin:@dev20.qa.atl.jboss.com:1521:qa</jdbc.url>
+ <jdbc.user>cruisecontrol</jdbc.user>
+ <jdbc.pass>cruisecontrol</jdbc.pass>
+ <jdbc.isolation />
+ </properties>
+ </profile>
+
+ <!-- The Oracle10g test envionment -->
+ <profile>
+ <id>oracle10g</id>
+ <dependencies>
+ <dependency>
+ <groupId>com.oracle</groupId>
+ <artifactId>ojdbc14</artifactId>
+ <!-- use the 10g drivers which are surprisingly largely bug free -->
+ <version>10.0.2.0</version>
+ </dependency>
+ </dependencies>
+ <properties>
+ <db.dialect>org.hibernate.dialect.Oracle10gDialect</db.dialect>
+ <jdbc.driver>oracle.jdbc.driver.OracleDriver</jdbc.driver>
+ <jdbc.url>jdbc:oracle:thin:@dev01.qa.atl.jboss.com:1521:qadb01</jdbc.url>
+ <jdbc.user>cruisecontrol</jdbc.user>
+ <jdbc.pass>cruisecontrol</jdbc.pass>
+ <jdbc.isolation />
+ </properties>
+ </profile>
+
+ <!-- The DB2 8.x test envionment (using 9x drivers)-->
+ <profile>
+ <id>db2-8</id>
+ <dependencies>
+ <dependency>
+ <groupId>com.ibm</groupId>
+ <artifactId>db2jcc</artifactId>
+ <version>3.1.57</version>
+ </dependency>
+ <dependency>
+ <groupId>com.ibm</groupId>
+ <artifactId>db2jcc_license_cu</artifactId>
+ <version>3.1.57</version>
+ </dependency>
+ </dependencies>
+ <properties>
+ <db.dialect>org.hibernate.dialect.DB2Dialect</db.dialect>
+ <jdbc.driver>com.ibm.db2.jcc.DB2Driver</jdbc.driver>
+ <jdbc.url>jdbc:db2://dev32.qa.atl.jboss.com:50000/jbossqa</jdbc.url>
+ <jdbc.user>hiber</jdbc.user>
+ <jdbc.pass>hiber</jdbc.pass>
+ <jdbc.isolation />
+ </properties>
+ </profile>
+
+ <!-- The Sybase 12 test envionment -->
+ <profile>
+ <id>sybase12</id>
+ <dependencies>
+ <dependency>
+ <groupId>com.sybase</groupId>
+ <artifactId>jconnect</artifactId>
+ <version>6.0.5</version>
+ </dependency>
+ </dependencies>
+ <properties>
+ <db.dialect>org.hibernate.dialect.SybaseDialect</db.dialect>
+ <jdbc.driver>com.sybase.jdbc3.jdbc.SybDriver</jdbc.driver>
+ <jdbc.url>jdbc:sybase:Tds:dev01.qa.atl.jboss.com:4100/cruisecontrol</jdbc.url>
+ <jdbc.user>cruisecontrol</jdbc.user>
+ <jdbc.pass>cruisecontrol</jdbc.pass>
+ <jdbc.isolation />
+ </properties>
+ </profile>
+
+ <!-- The SQLServer2005 (jTDS) test envionment -->
+ <profile>
+ <id>sqlserver-jtds</id>
+ <dependencies>
+ <dependency>
+ <groupId>net.sourceforge.jtds</groupId>
+ <artifactId>jtds</artifactId>
+ <version>1.2</version>
+ </dependency>
+ </dependencies>
+ <properties>
+ <db.dialect>org.hibernate.dialect.SQLServerDialect</db.dialect>
+ <jdbc.driver>net.sourceforge.jtds.jdbc.Driver</jdbc.driver>
+ <jdbc.url>jdbc:jtds:sqlserver://dev30.qa.atl.jboss.com:3918/cruisecontrol</jdbc.url>
+ <jdbc.user>cruisecontrol</jdbc.user>
+ <jdbc.pass>cruisecontrol</jdbc.pass>
+ <jdbc.isolation />
+ </properties>
+ </profile>
+
+ <!-- The SQLServer2005 (MS JDBC) test envionment -->
+ <profile>
+ <id>sqlserver-msjdbc</id>
+ <dependencies>
+ <dependency>
+ <groupId>com.microsoft.sqlserver</groupId>
+ <artifactId>msjdbc</artifactId>
+ <version>1.1</version>
+ </dependency>
+ </dependencies>
+ <properties>
+ <db.dialect>org.hibernate.dialect.SQLServerDialect</db.dialect>
+ <jdbc.driver>com.microsoft.sqlserver.jdbc.SQLServerDriver</jdbc.driver>
+ <jdbc.url>jdbc:sqlserver://dev30.qa.atl.jboss.com:3918</jdbc.url>
+ <jdbc.user>cruisecontrol</jdbc.user>
+ <jdbc.pass>cruisecontrol</jdbc.pass>
+ <jdbc.isolation>4096</jdbc.isolation>
+ </properties>
+ </profile>
+
+ </profiles>
+</project>
\ No newline at end of file
Deleted: core/tags/hibernate-3.3.0.GA/tutorials/eg/pom.xml
===================================================================
--- core/branches/Branch_3_3/tutorials/eg/pom.xml 2008-08-14 15:58:54 UTC (rev 15071)
+++ core/tags/hibernate-3.3.0.GA/tutorials/eg/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
@@ -1,46 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- ~ Hibernate, Relational Persistence for Idiomatic Java
- ~
- ~ Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
- ~ indicated by the @author tags or express copyright attribution
- ~ statements applied by the authors. All third-party contributions are
- ~ distributed under license by Red Hat Middleware LLC.
- ~
- ~ This copyrighted material is made available to anyone wishing to use, modify,
- ~ copy, or redistribute it subject to the terms and conditions of the GNU
- ~ Lesser General Public License, as published by the Free Software Foundation.
- ~
- ~ This program is distributed in the hope that it will be useful,
- ~ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- ~ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
- ~ for more details.
- ~
- ~ You should have received a copy of the GNU Lesser General Public License
- ~ along with this distribution; if not, write to:
- ~ Free Software Foundation, Inc.
- ~ 51 Franklin Street, Fifth Floor
- ~ Boston, MA 02110-1301 USA
- ~
- -->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-tutorials</artifactId>
- <version>3.3.0-SNAPSHOT</version>
- <relativePath>../pom.xml</relativePath>
- </parent>
-
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-tutorial-eg</artifactId>
- <packaging>jar</packaging>
-
- <name>Hibernate Example</name>
- <description>A simple example of Hibernate functionality</description>
-
-</project>
\ No newline at end of file
Copied: core/tags/hibernate-3.3.0.GA/tutorials/eg/pom.xml (from rev 15083, core/branches/Branch_3_3/tutorials/eg/pom.xml)
===================================================================
--- core/tags/hibernate-3.3.0.GA/tutorials/eg/pom.xml (rev 0)
+++ core/tags/hibernate-3.3.0.GA/tutorials/eg/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
@@ -0,0 +1,46 @@
+<?xml version="1.0"?>
+
+<!--
+ ~ Hibernate, Relational Persistence for Idiomatic Java
+ ~
+ ~ Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
+ ~ indicated by the @author tags or express copyright attribution
+ ~ statements applied by the authors. All third-party contributions are
+ ~ distributed under license by Red Hat Middleware LLC.
+ ~
+ ~ This copyrighted material is made available to anyone wishing to use, modify,
+ ~ copy, or redistribute it subject to the terms and conditions of the GNU
+ ~ Lesser General Public License, as published by the Free Software Foundation.
+ ~
+ ~ This program is distributed in the hope that it will be useful,
+ ~ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ ~ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
+ ~ for more details.
+ ~
+ ~ You should have received a copy of the GNU Lesser General Public License
+ ~ along with this distribution; if not, write to:
+ ~ Free Software Foundation, Inc.
+ ~ 51 Franklin Street, Fifth Floor
+ ~ Boston, MA 02110-1301 USA
+ ~
+ -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-tutorials</artifactId>
+ <version>3.3.0.GA</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-tutorial-eg</artifactId>
+ <packaging>jar</packaging>
+
+ <name>Hibernate Example</name>
+ <description>A simple example of Hibernate functionality</description>
+
+</project>
\ No newline at end of file
Deleted: core/tags/hibernate-3.3.0.GA/tutorials/pom.xml
===================================================================
--- core/branches/Branch_3_3/tutorials/pom.xml 2008-08-14 15:58:54 UTC (rev 15071)
+++ core/tags/hibernate-3.3.0.GA/tutorials/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
@@ -1,371 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- ~ Hibernate, Relational Persistence for Idiomatic Java
- ~
- ~ Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
- ~ indicated by the @author tags or express copyright attribution
- ~ statements applied by the authors. All third-party contributions are
- ~ distributed under license by Red Hat Middleware LLC.
- ~
- ~ This copyrighted material is made available to anyone wishing to use, modify,
- ~ copy, or redistribute it subject to the terms and conditions of the GNU
- ~ Lesser General Public License, as published by the Free Software Foundation.
- ~
- ~ This program is distributed in the hope that it will be useful,
- ~ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- ~ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
- ~ for more details.
- ~
- ~ You should have received a copy of the GNU Lesser General Public License
- ~ along with this distribution; if not, write to:
- ~ Free Software Foundation, Inc.
- ~ 51 Franklin Street, Fifth Floor
- ~ Boston, MA 02110-1301 USA
- -->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-parent</artifactId>
- <version>3.3.0-SNAPSHOT</version>
- <relativePath>../parent/pom.xml</relativePath>
- </parent>
-
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-tutorials</artifactId>
- <packaging>pom</packaging>
-
- <name>Hibernate Tutorials</name>
- <description>Series of tutorials demonstrating Hibernate functionality</description>
-
- <modules>
- <module>eg</module>
- <module>web</module>
- </modules>
-
- <dependencies>
- <dependency>
- <groupId>${groupId}</groupId>
- <artifactId>hibernate-core</artifactId>
- <version>${version}</version>
- </dependency>
- <dependency>
- <groupId>${groupId}</groupId>
- <artifactId>hibernate-testing</artifactId>
- <version>${version}</version>
- </dependency>
- <!-- these are optional on core... :( -->
- <dependency>
- <groupId>javassist</groupId>
- <artifactId>javassist</artifactId>
- <version>3.4.GA</version>
- </dependency>
- <dependency>
- <groupId>cglib</groupId>
- <artifactId>cglib</artifactId>
- <version>2.1_3</version>
- </dependency>
- <dependency>
- <groupId>asm</groupId>
- <artifactId>asm-attrs</artifactId>
- <version>1.5.3</version>
- </dependency>
- <!-- optional dom4j dependency; needed here for dom4j (de)serialization -->
- <dependency>
- <groupId>jaxen</groupId>
- <artifactId>jaxen</artifactId>
- <version>1.1</version>
- </dependency>
- <!-- the tutorials use HSQLDB -->
- <dependency>
- <groupId>hsqldb</groupId>
- <artifactId>hsqldb</artifactId>
- <version>1.8.0.2</version>
- </dependency>
- <!-- logging setup -->
- <dependency>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging</artifactId>
- <version>99.0-does-not-exist</version>
- </dependency>
- <dependency>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging-api</artifactId>
- <version>99.0-does-not-exist</version>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>jcl104-over-slf4j</artifactId>
- <version>1.4.2</version>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-log4j12</artifactId>
- <version>1.4.2</version>
- </dependency>
- <dependency>
- <groupId>log4j</groupId>
- <artifactId>log4j</artifactId>
- <version>1.2.14</version>
- </dependency>
- </dependencies>
-
- <build>
- <testResources>
- <testResource>
- <filtering>false</filtering>
- <directory>src/test/java</directory>
- <includes>
- <include>**/*.xml</include>
- </includes>
- </testResource>
- <testResource>
- <filtering>true</filtering>
- <directory>src/test/resources</directory>
- </testResource>
- </testResources>
-
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <configuration>
- <source>1.5</source>
- <target>1.5</target>
- </configuration>
- </plugin>
- </plugins>
- </build>
-
- <profiles>
- <!-- HSQLDB is the default (eventually move to H2) -->
- <profile>
- <id>hsqldb</id>
- <activation>
- <activeByDefault>true</activeByDefault>
- </activation>
- <dependencies>
- <dependency>
- <groupId>hsqldb</groupId>
- <artifactId>hsqldb</artifactId>
- <version>1.8.0.2</version>
- </dependency>
- </dependencies>
- <properties>
- <db.dialect>org.hibernate.dialect.HSQLDialect</db.dialect>
- <jdbc.driver>org.hsqldb.jdbcDriver</jdbc.driver>
- <jdbc.url>jdbc:hsqldb:target/test/db/hsqldb/hibernate</jdbc.url>
- <jdbc.user>sa</jdbc.user>
- <jdbc.pass />
- <jdbc.isolation />
- </properties>
- </profile>
-
- <!-- The H2 test envionment -->
- <profile>
- <id>h2</id>
- <dependencies>
- <dependency>
- <groupId>org.h2database</groupId>
- <artifactId>h2database</artifactId>
- <version>1.0.20061217</version>
- </dependency>
- </dependencies>
- <properties>
- <db.dialect>org.hibernate.dialect.H2Dialect</db.dialect>
- <jdbc.driver>org.h2.Driver</jdbc.driver>
- <jdbc.url>jdbc:h2:mem:target/test/db/h2/hibernate</jdbc.url>
- <jdbc.user>sa</jdbc.user>
- <jdbc.pass />
- <jdbc.isolation />
- </properties>
- </profile>
-
- <!--
- ###################################################################
- Profiles naming db instances in the Red Hat QA/QE lab
-
- First, those with OSS drivers
- ###################################################################
- -->
-
- <!-- The MySQL5 test envionment -->
- <profile>
- <id>mysql5</id>
- <dependencies>
- <dependency>
- <groupId>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- <version>5.0.5</version>
- </dependency>
- </dependencies>
- <properties>
- <db.dialect>org.hibernate.dialect.MySQL5InnoDBDialect</db.dialect>
- <jdbc.driver>com.mysql.jdbc.Driver</jdbc.driver>
- <jdbc.url>jdbc:mysql://dev02.qa.atl.jboss.com/cruisecontrol</jdbc.url>
- <jdbc.user>cruisecontrol</jdbc.user>
- <jdbc.pass>cruisecontrol</jdbc.pass>
- <jdbc.isolation />
- </properties>
- </profile>
-
- <!-- The PostgreSQL test envionment -->
- <profile>
- <id>pgsql8</id>
- <dependencies>
- <dependency>
- <groupId>postgresql</groupId>
- <artifactId>postgresql</artifactId>
- <version>8.2-504</version>
- <classifier>jdbc3</classifier>
- </dependency>
- </dependencies>
- <properties>
- <db.dialect>org.hibernate.dialect.PostgreSQLDialect</db.dialect>
- <jdbc.driver>org.postgresql.Driver</jdbc.driver>
- <jdbc.url>jdbc:postgresql://dev01.qa.atl.jboss.com:5432:cruisecontrol</jdbc.url>
- <jdbc.user>cruisecontrol</jdbc.user>
- <jdbc.pass>cruisecontrol</jdbc.pass>
- <jdbc.isolation />
- </properties>
- </profile>
-
- <!--
- ###################################################################
- Then, those with commercial drivers
- ###################################################################
- -->
-
- <!-- The Oracle9i test envionment -->
- <profile>
- <id>oracle9i</id>
- <dependencies>
- <dependency>
- <groupId>com.oracle</groupId>
- <artifactId>ojdbc14</artifactId>
- <!-- use the 10g drivers which are surprisingly largely bug free -->
- <version>10.0.2.0</version>
- </dependency>
- </dependencies>
- <properties>
- <db.dialect>org.hibernate.dialect.Oracle9iDialect</db.dialect>
- <jdbc.driver>oracle.jdbc.driver.OracleDriver</jdbc.driver>
- <jdbc.url>jdbc:oracle:thin:@dev20.qa.atl.jboss.com:1521:qa</jdbc.url>
- <jdbc.user>cruisecontrol</jdbc.user>
- <jdbc.pass>cruisecontrol</jdbc.pass>
- <jdbc.isolation />
- </properties>
- </profile>
-
- <!-- The Oracle10g test envionment -->
- <profile>
- <id>oracle10g</id>
- <dependencies>
- <dependency>
- <groupId>com.oracle</groupId>
- <artifactId>ojdbc14</artifactId>
- <!-- use the 10g drivers which are surprisingly largely bug free -->
- <version>10.0.2.0</version>
- </dependency>
- </dependencies>
- <properties>
- <db.dialect>org.hibernate.dialect.Oracle10gDialect</db.dialect>
- <jdbc.driver>oracle.jdbc.driver.OracleDriver</jdbc.driver>
- <jdbc.url>jdbc:oracle:thin:@dev01.qa.atl.jboss.com:1521:qadb01</jdbc.url>
- <jdbc.user>cruisecontrol</jdbc.user>
- <jdbc.pass>cruisecontrol</jdbc.pass>
- <jdbc.isolation />
- </properties>
- </profile>
-
- <!-- The DB2 8.x test envionment (using 9x drivers)-->
- <profile>
- <id>db2-8</id>
- <dependencies>
- <dependency>
- <groupId>com.ibm</groupId>
- <artifactId>db2jcc</artifactId>
- <version>3.1.57</version>
- </dependency>
- <dependency>
- <groupId>com.ibm</groupId>
- <artifactId>db2jcc_license_cu</artifactId>
- <version>3.1.57</version>
- </dependency>
- </dependencies>
- <properties>
- <db.dialect>org.hibernate.dialect.DB2Dialect</db.dialect>
- <jdbc.driver>com.ibm.db2.jcc.DB2Driver</jdbc.driver>
- <jdbc.url>jdbc:db2://dev32.qa.atl.jboss.com:50000/jbossqa</jdbc.url>
- <jdbc.user>hiber</jdbc.user>
- <jdbc.pass>hiber</jdbc.pass>
- <jdbc.isolation />
- </properties>
- </profile>
-
- <!-- The Sybase 12 test envionment -->
- <profile>
- <id>sybase12</id>
- <dependencies>
- <dependency>
- <groupId>com.sybase</groupId>
- <artifactId>jconnect</artifactId>
- <version>6.0.5</version>
- </dependency>
- </dependencies>
- <properties>
- <db.dialect>org.hibernate.dialect.SybaseDialect</db.dialect>
- <jdbc.driver>com.sybase.jdbc3.jdbc.SybDriver</jdbc.driver>
- <jdbc.url>jdbc:sybase:Tds:dev01.qa.atl.jboss.com:4100/cruisecontrol</jdbc.url>
- <jdbc.user>cruisecontrol</jdbc.user>
- <jdbc.pass>cruisecontrol</jdbc.pass>
- <jdbc.isolation />
- </properties>
- </profile>
-
- <!-- The SQLServer2005 (jTDS) test envionment -->
- <profile>
- <id>sqlserver-jtds</id>
- <dependencies>
- <dependency>
- <groupId>net.sourceforge.jtds</groupId>
- <artifactId>jtds</artifactId>
- <version>1.2</version>
- </dependency>
- </dependencies>
- <properties>
- <db.dialect>org.hibernate.dialect.SQLServerDialect</db.dialect>
- <jdbc.driver>net.sourceforge.jtds.jdbc.Driver</jdbc.driver>
- <jdbc.url>jdbc:jtds:sqlserver://dev30.qa.atl.jboss.com:3918/cruisecontrol</jdbc.url>
- <jdbc.user>cruisecontrol</jdbc.user>
- <jdbc.pass>cruisecontrol</jdbc.pass>
- <jdbc.isolation />
- </properties>
- </profile>
-
- <!-- The SQLServer2005 (MS JDBC) test envionment -->
- <profile>
- <id>sqlserver-msjdbc</id>
- <dependencies>
- <dependency>
- <groupId>com.microsoft.sqlserver</groupId>
- <artifactId>msjdbc</artifactId>
- <version>1.1</version>
- </dependency>
- </dependencies>
- <properties>
- <db.dialect>org.hibernate.dialect.SQLServerDialect</db.dialect>
- <jdbc.driver>com.microsoft.sqlserver.jdbc.SQLServerDriver</jdbc.driver>
- <jdbc.url>jdbc:sqlserver://dev30.qa.atl.jboss.com:3918</jdbc.url>
- <jdbc.user>cruisecontrol</jdbc.user>
- <jdbc.pass>cruisecontrol</jdbc.pass>
- <jdbc.isolation>4096</jdbc.isolation>
- </properties>
- </profile>
-
- </profiles>
-</project>
\ No newline at end of file
Copied: core/tags/hibernate-3.3.0.GA/tutorials/pom.xml (from rev 15083, core/branches/Branch_3_3/tutorials/pom.xml)
===================================================================
--- core/tags/hibernate-3.3.0.GA/tutorials/pom.xml (rev 0)
+++ core/tags/hibernate-3.3.0.GA/tutorials/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
@@ -0,0 +1,371 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ ~ Hibernate, Relational Persistence for Idiomatic Java
+ ~
+ ~ Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
+ ~ indicated by the @author tags or express copyright attribution
+ ~ statements applied by the authors. All third-party contributions are
+ ~ distributed under license by Red Hat Middleware LLC.
+ ~
+ ~ This copyrighted material is made available to anyone wishing to use, modify,
+ ~ copy, or redistribute it subject to the terms and conditions of the GNU
+ ~ Lesser General Public License, as published by the Free Software Foundation.
+ ~
+ ~ This program is distributed in the hope that it will be useful,
+ ~ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ ~ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
+ ~ for more details.
+ ~
+ ~ You should have received a copy of the GNU Lesser General Public License
+ ~ along with this distribution; if not, write to:
+ ~ Free Software Foundation, Inc.
+ ~ 51 Franklin Street, Fifth Floor
+ ~ Boston, MA 02110-1301 USA
+ -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-parent</artifactId>
+ <version>3.3.0.GA</version>
+ <relativePath>../parent/pom.xml</relativePath>
+ </parent>
+
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-tutorials</artifactId>
+ <packaging>pom</packaging>
+
+ <name>Hibernate Tutorials</name>
+ <description>Series of tutorials demonstrating Hibernate functionality</description>
+
+ <modules>
+ <module>eg</module>
+ <module>web</module>
+ </modules>
+
+ <dependencies>
+ <dependency>
+ <groupId>${groupId}</groupId>
+ <artifactId>hibernate-core</artifactId>
+ <version>${version}</version>
+ </dependency>
+ <dependency>
+ <groupId>${groupId}</groupId>
+ <artifactId>hibernate-testing</artifactId>
+ <version>${version}</version>
+ </dependency>
+ <!-- these are optional on core... :( -->
+ <dependency>
+ <groupId>javassist</groupId>
+ <artifactId>javassist</artifactId>
+ <version>3.4.GA</version>
+ </dependency>
+ <dependency>
+ <groupId>cglib</groupId>
+ <artifactId>cglib</artifactId>
+ <version>2.1_3</version>
+ </dependency>
+ <dependency>
+ <groupId>asm</groupId>
+ <artifactId>asm-attrs</artifactId>
+ <version>1.5.3</version>
+ </dependency>
+ <!-- optional dom4j dependency; needed here for dom4j (de)serialization -->
+ <dependency>
+ <groupId>jaxen</groupId>
+ <artifactId>jaxen</artifactId>
+ <version>1.1</version>
+ </dependency>
+ <!-- the tutorials use HSQLDB -->
+ <dependency>
+ <groupId>hsqldb</groupId>
+ <artifactId>hsqldb</artifactId>
+ <version>1.8.0.2</version>
+ </dependency>
+ <!-- logging setup -->
+ <dependency>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ <version>99.0-does-not-exist</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging-api</artifactId>
+ <version>99.0-does-not-exist</version>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>jcl104-over-slf4j</artifactId>
+ <version>1.4.2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-log4j12</artifactId>
+ <version>1.4.2</version>
+ </dependency>
+ <dependency>
+ <groupId>log4j</groupId>
+ <artifactId>log4j</artifactId>
+ <version>1.2.14</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <testResources>
+ <testResource>
+ <filtering>false</filtering>
+ <directory>src/test/java</directory>
+ <includes>
+ <include>**/*.xml</include>
+ </includes>
+ </testResource>
+ <testResource>
+ <filtering>true</filtering>
+ <directory>src/test/resources</directory>
+ </testResource>
+ </testResources>
+
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <source>1.5</source>
+ <target>1.5</target>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+ <profiles>
+ <!-- HSQLDB is the default (eventually move to H2) -->
+ <profile>
+ <id>hsqldb</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ </activation>
+ <dependencies>
+ <dependency>
+ <groupId>hsqldb</groupId>
+ <artifactId>hsqldb</artifactId>
+ <version>1.8.0.2</version>
+ </dependency>
+ </dependencies>
+ <properties>
+ <db.dialect>org.hibernate.dialect.HSQLDialect</db.dialect>
+ <jdbc.driver>org.hsqldb.jdbcDriver</jdbc.driver>
+ <jdbc.url>jdbc:hsqldb:target/test/db/hsqldb/hibernate</jdbc.url>
+ <jdbc.user>sa</jdbc.user>
+ <jdbc.pass />
+ <jdbc.isolation />
+ </properties>
+ </profile>
+
+ <!-- The H2 test envionment -->
+ <profile>
+ <id>h2</id>
+ <dependencies>
+ <dependency>
+ <groupId>org.h2database</groupId>
+ <artifactId>h2database</artifactId>
+ <version>1.0.20061217</version>
+ </dependency>
+ </dependencies>
+ <properties>
+ <db.dialect>org.hibernate.dialect.H2Dialect</db.dialect>
+ <jdbc.driver>org.h2.Driver</jdbc.driver>
+ <jdbc.url>jdbc:h2:mem:target/test/db/h2/hibernate</jdbc.url>
+ <jdbc.user>sa</jdbc.user>
+ <jdbc.pass />
+ <jdbc.isolation />
+ </properties>
+ </profile>
+
+ <!--
+ ###################################################################
+ Profiles naming db instances in the Red Hat QA/QE lab
+
+ First, those with OSS drivers
+ ###################################################################
+ -->
+
+ <!-- The MySQL5 test envionment -->
+ <profile>
+ <id>mysql5</id>
+ <dependencies>
+ <dependency>
+ <groupId>mysql</groupId>
+ <artifactId>mysql-connector-java</artifactId>
+ <version>5.0.5</version>
+ </dependency>
+ </dependencies>
+ <properties>
+ <db.dialect>org.hibernate.dialect.MySQL5InnoDBDialect</db.dialect>
+ <jdbc.driver>com.mysql.jdbc.Driver</jdbc.driver>
+ <jdbc.url>jdbc:mysql://dev02.qa.atl.jboss.com/cruisecontrol</jdbc.url>
+ <jdbc.user>cruisecontrol</jdbc.user>
+ <jdbc.pass>cruisecontrol</jdbc.pass>
+ <jdbc.isolation />
+ </properties>
+ </profile>
+
+ <!-- The PostgreSQL test envionment -->
+ <profile>
+ <id>pgsql8</id>
+ <dependencies>
+ <dependency>
+ <groupId>postgresql</groupId>
+ <artifactId>postgresql</artifactId>
+ <version>8.2-504</version>
+ <classifier>jdbc3</classifier>
+ </dependency>
+ </dependencies>
+ <properties>
+ <db.dialect>org.hibernate.dialect.PostgreSQLDialect</db.dialect>
+ <jdbc.driver>org.postgresql.Driver</jdbc.driver>
+ <jdbc.url>jdbc:postgresql://dev01.qa.atl.jboss.com:5432:cruisecontrol</jdbc.url>
+ <jdbc.user>cruisecontrol</jdbc.user>
+ <jdbc.pass>cruisecontrol</jdbc.pass>
+ <jdbc.isolation />
+ </properties>
+ </profile>
+
+ <!--
+ ###################################################################
+ Then, those with commercial drivers
+ ###################################################################
+ -->
+
+ <!-- The Oracle9i test envionment -->
+ <profile>
+ <id>oracle9i</id>
+ <dependencies>
+ <dependency>
+ <groupId>com.oracle</groupId>
+ <artifactId>ojdbc14</artifactId>
+ <!-- use the 10g drivers which are surprisingly largely bug free -->
+ <version>10.0.2.0</version>
+ </dependency>
+ </dependencies>
+ <properties>
+ <db.dialect>org.hibernate.dialect.Oracle9iDialect</db.dialect>
+ <jdbc.driver>oracle.jdbc.driver.OracleDriver</jdbc.driver>
+ <jdbc.url>jdbc:oracle:thin:@dev20.qa.atl.jboss.com:1521:qa</jdbc.url>
+ <jdbc.user>cruisecontrol</jdbc.user>
+ <jdbc.pass>cruisecontrol</jdbc.pass>
+ <jdbc.isolation />
+ </properties>
+ </profile>
+
+ <!-- The Oracle10g test envionment -->
+ <profile>
+ <id>oracle10g</id>
+ <dependencies>
+ <dependency>
+ <groupId>com.oracle</groupId>
+ <artifactId>ojdbc14</artifactId>
+ <!-- use the 10g drivers which are surprisingly largely bug free -->
+ <version>10.0.2.0</version>
+ </dependency>
+ </dependencies>
+ <properties>
+ <db.dialect>org.hibernate.dialect.Oracle10gDialect</db.dialect>
+ <jdbc.driver>oracle.jdbc.driver.OracleDriver</jdbc.driver>
+ <jdbc.url>jdbc:oracle:thin:@dev01.qa.atl.jboss.com:1521:qadb01</jdbc.url>
+ <jdbc.user>cruisecontrol</jdbc.user>
+ <jdbc.pass>cruisecontrol</jdbc.pass>
+ <jdbc.isolation />
+ </properties>
+ </profile>
+
+ <!-- The DB2 8.x test envionment (using 9x drivers)-->
+ <profile>
+ <id>db2-8</id>
+ <dependencies>
+ <dependency>
+ <groupId>com.ibm</groupId>
+ <artifactId>db2jcc</artifactId>
+ <version>3.1.57</version>
+ </dependency>
+ <dependency>
+ <groupId>com.ibm</groupId>
+ <artifactId>db2jcc_license_cu</artifactId>
+ <version>3.1.57</version>
+ </dependency>
+ </dependencies>
+ <properties>
+ <db.dialect>org.hibernate.dialect.DB2Dialect</db.dialect>
+ <jdbc.driver>com.ibm.db2.jcc.DB2Driver</jdbc.driver>
+ <jdbc.url>jdbc:db2://dev32.qa.atl.jboss.com:50000/jbossqa</jdbc.url>
+ <jdbc.user>hiber</jdbc.user>
+ <jdbc.pass>hiber</jdbc.pass>
+ <jdbc.isolation />
+ </properties>
+ </profile>
+
+ <!-- The Sybase 12 test envionment -->
+ <profile>
+ <id>sybase12</id>
+ <dependencies>
+ <dependency>
+ <groupId>com.sybase</groupId>
+ <artifactId>jconnect</artifactId>
+ <version>6.0.5</version>
+ </dependency>
+ </dependencies>
+ <properties>
+ <db.dialect>org.hibernate.dialect.SybaseDialect</db.dialect>
+ <jdbc.driver>com.sybase.jdbc3.jdbc.SybDriver</jdbc.driver>
+ <jdbc.url>jdbc:sybase:Tds:dev01.qa.atl.jboss.com:4100/cruisecontrol</jdbc.url>
+ <jdbc.user>cruisecontrol</jdbc.user>
+ <jdbc.pass>cruisecontrol</jdbc.pass>
+ <jdbc.isolation />
+ </properties>
+ </profile>
+
+ <!-- The SQLServer2005 (jTDS) test envionment -->
+ <profile>
+ <id>sqlserver-jtds</id>
+ <dependencies>
+ <dependency>
+ <groupId>net.sourceforge.jtds</groupId>
+ <artifactId>jtds</artifactId>
+ <version>1.2</version>
+ </dependency>
+ </dependencies>
+ <properties>
+ <db.dialect>org.hibernate.dialect.SQLServerDialect</db.dialect>
+ <jdbc.driver>net.sourceforge.jtds.jdbc.Driver</jdbc.driver>
+ <jdbc.url>jdbc:jtds:sqlserver://dev30.qa.atl.jboss.com:3918/cruisecontrol</jdbc.url>
+ <jdbc.user>cruisecontrol</jdbc.user>
+ <jdbc.pass>cruisecontrol</jdbc.pass>
+ <jdbc.isolation />
+ </properties>
+ </profile>
+
+ <!-- The SQLServer2005 (MS JDBC) test envionment -->
+ <profile>
+ <id>sqlserver-msjdbc</id>
+ <dependencies>
+ <dependency>
+ <groupId>com.microsoft.sqlserver</groupId>
+ <artifactId>msjdbc</artifactId>
+ <version>1.1</version>
+ </dependency>
+ </dependencies>
+ <properties>
+ <db.dialect>org.hibernate.dialect.SQLServerDialect</db.dialect>
+ <jdbc.driver>com.microsoft.sqlserver.jdbc.SQLServerDriver</jdbc.driver>
+ <jdbc.url>jdbc:sqlserver://dev30.qa.atl.jboss.com:3918</jdbc.url>
+ <jdbc.user>cruisecontrol</jdbc.user>
+ <jdbc.pass>cruisecontrol</jdbc.pass>
+ <jdbc.isolation>4096</jdbc.isolation>
+ </properties>
+ </profile>
+
+ </profiles>
+</project>
\ No newline at end of file
Deleted: core/tags/hibernate-3.3.0.GA/tutorials/web/pom.xml
===================================================================
--- core/branches/Branch_3_3/tutorials/web/pom.xml 2008-08-14 15:58:54 UTC (rev 15071)
+++ core/tags/hibernate-3.3.0.GA/tutorials/web/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
@@ -1,27 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-tutorials</artifactId>
- <version>3.3.0-SNAPSHOT</version>
- <relativePath>../pom.xml</relativePath>
- </parent>
-
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-tutorial-web</artifactId>
- <packaging>war</packaging>
-
- <name>Hibernate Web Tutorial</name>
- <description>A webapp-based tutorial project showcasing Hibernate usage</description>
-
- <dependencies>
- <dependency>
- <groupId>javax.servlet</groupId>
- <artifactId>servlet-api</artifactId>
- <version>2.3</version>
- </dependency>
- </dependencies>
-
-</project>
\ No newline at end of file
Copied: core/tags/hibernate-3.3.0.GA/tutorials/web/pom.xml (from rev 15083, core/branches/Branch_3_3/tutorials/web/pom.xml)
===================================================================
--- core/tags/hibernate-3.3.0.GA/tutorials/web/pom.xml (rev 0)
+++ core/tags/hibernate-3.3.0.GA/tutorials/web/pom.xml 2008-08-14 21:11:12 UTC (rev 15084)
@@ -0,0 +1,27 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-tutorials</artifactId>
+ <version>3.3.0.GA</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-tutorial-web</artifactId>
+ <packaging>war</packaging>
+
+ <name>Hibernate Web Tutorial</name>
+ <description>A webapp-based tutorial project showcasing Hibernate usage</description>
+
+ <dependencies>
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>servlet-api</artifactId>
+ <version>2.3</version>
+ </dependency>
+ </dependencies>
+
+</project>
\ No newline at end of file
16 years, 1 month