Hibernate SVN: r10290 - trunk/Hibernate3/src/org/hibernate/persister/collection
by hibernate-commits@lists.jboss.org
Author: epbernard
Date: 2006-08-18 17:50:41 -0400 (Fri, 18 Aug 2006)
New Revision: 10290
Modified:
trunk/Hibernate3/src/org/hibernate/persister/collection/AbstractCollectionPersister.java
Log:
HHH-2015 add parenthesis around <class where=/> or <collection where=/> clauses, allowing safe multi term clauses
Modified: trunk/Hibernate3/src/org/hibernate/persister/collection/AbstractCollectionPersister.java
===================================================================
--- trunk/Hibernate3/src/org/hibernate/persister/collection/AbstractCollectionPersister.java 2006-08-18 21:50:16 UTC (rev 10289)
+++ trunk/Hibernate3/src/org/hibernate/persister/collection/AbstractCollectionPersister.java 2006-08-18 21:50:41 UTC (rev 10290)
@@ -523,7 +523,9 @@
// Handle any filters applied to this collection for many-to-many
manyToManyFilterHelper = new FilterHelper( collection.getManyToManyFilterMap(), dialect, factory.getSqlFunctionRegistry() );
- manyToManyWhereString = collection.getManyToManyWhere();
+ manyToManyWhereString = StringHelper.isNotEmpty( collection.getManyToManyWhere() ) ?
+ "( " + collection.getManyToManyWhere() + ")" :
+ null;
manyToManyWhereTemplate = manyToManyWhereString == null ?
null :
Template.renderWhereStringTemplate( manyToManyWhereString, factory.getDialect(), factory.getSqlFunctionRegistry() );
19 years, 2 months
Hibernate SVN: r10289 - branches/Branch_3_2/Hibernate3/src/org/hibernate/persister/collection
by hibernate-commits@lists.jboss.org
Author: epbernard
Date: 2006-08-18 17:50:16 -0400 (Fri, 18 Aug 2006)
New Revision: 10289
Modified:
branches/Branch_3_2/Hibernate3/src/org/hibernate/persister/collection/AbstractCollectionPersister.java
Log:
HHH-2015 add parenthesis around <class where=/> or <collection where=/> clauses, allowing safe multi term clauses
Modified: branches/Branch_3_2/Hibernate3/src/org/hibernate/persister/collection/AbstractCollectionPersister.java
===================================================================
--- branches/Branch_3_2/Hibernate3/src/org/hibernate/persister/collection/AbstractCollectionPersister.java 2006-08-18 21:46:52 UTC (rev 10288)
+++ branches/Branch_3_2/Hibernate3/src/org/hibernate/persister/collection/AbstractCollectionPersister.java 2006-08-18 21:50:16 UTC (rev 10289)
@@ -523,7 +523,9 @@
// Handle any filters applied to this collection for many-to-many
manyToManyFilterHelper = new FilterHelper( collection.getManyToManyFilterMap(), dialect, factory.getSqlFunctionRegistry() );
- manyToManyWhereString = collection.getManyToManyWhere();
+ manyToManyWhereString = StringHelper.isNotEmpty( collection.getManyToManyWhere() ) ?
+ "( " + collection.getManyToManyWhere() + " )" :
+ null;
manyToManyWhereTemplate = manyToManyWhereString == null ?
null :
Template.renderWhereStringTemplate( manyToManyWhereString, factory.getDialect(), factory.getSqlFunctionRegistry() );
19 years, 2 months
Hibernate SVN: r10288 - branches/Branch_3_2/Hibernate3
by hibernate-commits@lists.jboss.org
Author: steve.ebersole(a)jboss.com
Date: 2006-08-18 17:46:52 -0400 (Fri, 18 Aug 2006)
New Revision: 10288
Modified:
branches/Branch_3_2/Hibernate3/build.xml
Log:
fix issue with running junit target on in-process hsqldb instance
Modified: branches/Branch_3_2/Hibernate3/build.xml
===================================================================
--- branches/Branch_3_2/Hibernate3/build.xml 2006-08-18 21:46:07 UTC (rev 10287)
+++ branches/Branch_3_2/Hibernate3/build.xml 2006-08-18 21:46:52 UTC (rev 10288)
@@ -41,7 +41,7 @@
<property name="dir.eg" value="eg"/>
<property name="dir.props" value="${dir.etc}" />
- <!-- Define the layout of the output directories -->
+ <!-- Define the build directory layout -->
<property name="dir.build" value="build" />
<property name="dir.out.classes" value="${dir.build}/classes" />
<property name="dir.out.test-classes" value="${dir.build}/testclasses" />
@@ -249,7 +249,13 @@
</junitreport>
</target>
- <target name="junit" depends="junit.standard,junit.instrument" />
+ <target name="junit" depends="junit.prepare">
+ <sequential>
+ <antcall target="junit.standard" />
+ <antcall target="junit.instrument.cglib" />
+ <antcall target="junit.instrument.javassist" />
+ </sequential>
+ </target>
<target name="junit.prepare" depends="cleantestdb,compiletest">
<delete dir="${dir.out.junit}"/>
@@ -298,7 +304,7 @@
<target name="junit.instrument.cglib" depends="instrument.cglib">
<mkdir dir="${dir.out.junit}"/>
- <junit printsummary="yes" maxmemory="256M" fork="no">
+ <junit printsummary="yes" maxmemory="256M" fork="yes">
<jvmarg value="-Dhibernate.test.validatefailureexpected=${hibernate.test.validatefailureexpected}"/>
<classpath>
<fileset refid="fs.lib" />
@@ -321,7 +327,7 @@
<target name="junit.instrument.javassist" depends="instrument.javassist">
<mkdir dir="${dir.out.junit}"/>
- <junit printsummary="yes" maxmemory="256M" fork="no">
+ <junit printsummary="yes" maxmemory="256M" fork="yes">
<jvmarg value="-Dhibernate.test.validatefailureexpected=${hibernate.test.validatefailureexpected}"/>
<classpath>
<fileset refid="fs.lib" />
19 years, 2 months
Hibernate SVN: r10287 - trunk/Hibernate3
by hibernate-commits@lists.jboss.org
Author: steve.ebersole(a)jboss.com
Date: 2006-08-18 17:46:07 -0400 (Fri, 18 Aug 2006)
New Revision: 10287
Modified:
trunk/Hibernate3/build.xml
Log:
fix issue with running junit target on in-process hsqldb instance
Modified: trunk/Hibernate3/build.xml
===================================================================
--- trunk/Hibernate3/build.xml 2006-08-18 21:46:07 UTC (rev 10286)
+++ trunk/Hibernate3/build.xml 2006-08-18 21:46:07 UTC (rev 10287)
@@ -41,7 +41,7 @@
<property name="dir.eg" value="eg"/>
<property name="dir.props" value="${dir.etc}" />
- <!-- Define the layout of the output directories -->
+ <!-- Define the build directory layout -->
<property name="dir.build" value="build" />
<property name="dir.out.classes" value="${dir.build}/classes" />
<property name="dir.out.test-classes" value="${dir.build}/testclasses" />
@@ -249,7 +249,13 @@
</junitreport>
</target>
- <target name="junit" depends="junit.standard,junit.instrument" />
+ <target name="junit" depends="junit.prepare">
+ <sequential>
+ <antcall target="junit.standard" />
+ <antcall target="junit.instrument.cglib" />
+ <antcall target="junit.instrument.javassist" />
+ </sequential>
+ </target>
<target name="junit.prepare" depends="cleantestdb,compiletest">
<delete dir="${dir.out.junit}"/>
@@ -298,7 +304,7 @@
<target name="junit.instrument.cglib" depends="instrument.cglib">
<mkdir dir="${dir.out.junit}"/>
- <junit printsummary="yes" maxmemory="256M" fork="no">
+ <junit printsummary="yes" maxmemory="256M" fork="yes">
<jvmarg value="-Dhibernate.test.validatefailureexpected=${hibernate.test.validatefailureexpected}"/>
<classpath>
<fileset refid="fs.lib" />
@@ -321,7 +327,7 @@
<target name="junit.instrument.javassist" depends="instrument.javassist">
<mkdir dir="${dir.out.junit}"/>
- <junit printsummary="yes" maxmemory="256M" fork="no">
+ <junit printsummary="yes" maxmemory="256M" fork="yes">
<jvmarg value="-Dhibernate.test.validatefailureexpected=${hibernate.test.validatefailureexpected}"/>
<classpath>
<fileset refid="fs.lib" />
19 years, 2 months
Hibernate SVN: r10286 - in branches/Branch_3_2/Hibernate3/src/org/hibernate/persister: collection entity
by hibernate-commits@lists.jboss.org
Author: epbernard
Date: 2006-08-18 17:46:07 -0400 (Fri, 18 Aug 2006)
New Revision: 10286
Modified:
branches/Branch_3_2/Hibernate3/src/org/hibernate/persister/collection/AbstractCollectionPersister.java
branches/Branch_3_2/Hibernate3/src/org/hibernate/persister/entity/AbstractEntityPersister.java
Log:
HHH-2015 add parenthesis around <class where=/> or <collection where=/> clauses, allowing safe multi term clauses
Modified: branches/Branch_3_2/Hibernate3/src/org/hibernate/persister/collection/AbstractCollectionPersister.java
===================================================================
--- branches/Branch_3_2/Hibernate3/src/org/hibernate/persister/collection/AbstractCollectionPersister.java 2006-08-18 21:45:44 UTC (rev 10285)
+++ branches/Branch_3_2/Hibernate3/src/org/hibernate/persister/collection/AbstractCollectionPersister.java 2006-08-18 21:46:07 UTC (rev 10286)
@@ -249,7 +249,7 @@
sqlOrderByStringTemplate = hasOrder ?
Template.renderOrderByStringTemplate(sqlOrderByString, dialect, factory.getSqlFunctionRegistry()) :
null;
- sqlWhereString = collection.getWhere();
+ sqlWhereString = StringHelper.isNotEmpty( collection.getWhere() ) ? "( " + collection.getWhere() + ") " : null;
hasWhere = sqlWhereString != null;
sqlWhereStringTemplate = hasWhere ?
Template.renderWhereStringTemplate(sqlWhereString, dialect, factory.getSqlFunctionRegistry()) :
Modified: branches/Branch_3_2/Hibernate3/src/org/hibernate/persister/entity/AbstractEntityPersister.java
===================================================================
--- branches/Branch_3_2/Hibernate3/src/org/hibernate/persister/entity/AbstractEntityPersister.java 2006-08-18 21:45:44 UTC (rev 10285)
+++ branches/Branch_3_2/Hibernate3/src/org/hibernate/persister/entity/AbstractEntityPersister.java 2006-08-18 21:46:07 UTC (rev 10286)
@@ -473,7 +473,7 @@
//WHERE STRING
- sqlWhereString = persistentClass.getWhere();
+ sqlWhereString = StringHelper.isNotEmpty( persistentClass.getWhere() ) ? "( " + persistentClass.getWhere() + ") " : null;
sqlWhereStringTemplate = sqlWhereString == null ?
null :
Template.renderWhereStringTemplate( sqlWhereString, factory.getDialect(), factory.getSqlFunctionRegistry() );
19 years, 2 months
Hibernate SVN: r10285 - in trunk/Hibernate3/src/org/hibernate/persister: collection entity
by hibernate-commits@lists.jboss.org
Author: epbernard
Date: 2006-08-18 17:45:44 -0400 (Fri, 18 Aug 2006)
New Revision: 10285
Modified:
trunk/Hibernate3/src/org/hibernate/persister/collection/AbstractCollectionPersister.java
trunk/Hibernate3/src/org/hibernate/persister/entity/AbstractEntityPersister.java
Log:
HHH-2015 add parenthesis around <class where=/> or <collection where=/> clauses, allowing safe multi term clauses
Modified: trunk/Hibernate3/src/org/hibernate/persister/collection/AbstractCollectionPersister.java
===================================================================
--- trunk/Hibernate3/src/org/hibernate/persister/collection/AbstractCollectionPersister.java 2006-08-18 19:54:07 UTC (rev 10284)
+++ trunk/Hibernate3/src/org/hibernate/persister/collection/AbstractCollectionPersister.java 2006-08-18 21:45:44 UTC (rev 10285)
@@ -249,7 +249,7 @@
sqlOrderByStringTemplate = hasOrder ?
Template.renderOrderByStringTemplate(sqlOrderByString, dialect, factory.getSqlFunctionRegistry()) :
null;
- sqlWhereString = collection.getWhere();
+ sqlWhereString = StringHelper.isNotEmpty( collection.getWhere() ) ? "( " + collection.getWhere() + ") " : null;
hasWhere = sqlWhereString != null;
sqlWhereStringTemplate = hasWhere ?
Template.renderWhereStringTemplate(sqlWhereString, dialect, factory.getSqlFunctionRegistry()) :
Modified: trunk/Hibernate3/src/org/hibernate/persister/entity/AbstractEntityPersister.java
===================================================================
--- trunk/Hibernate3/src/org/hibernate/persister/entity/AbstractEntityPersister.java 2006-08-18 19:54:07 UTC (rev 10284)
+++ trunk/Hibernate3/src/org/hibernate/persister/entity/AbstractEntityPersister.java 2006-08-18 21:45:44 UTC (rev 10285)
@@ -473,7 +473,7 @@
//WHERE STRING
- sqlWhereString = persistentClass.getWhere();
+ sqlWhereString = StringHelper.isNotEmpty( persistentClass.getWhere() ) ? "( " + persistentClass.getWhere() + ") " : null;
sqlWhereStringTemplate = sqlWhereString == null ?
null :
Template.renderWhereStringTemplate( sqlWhereString, factory.getDialect(), factory.getSqlFunctionRegistry() );
19 years, 2 months
Hibernate SVN: r10284 - in trunk/HibernateExt/ejb: lib src/java/org/hibernate/ejb
by hibernate-commits@lists.jboss.org
Author: epbernard
Date: 2006-08-18 15:54:07 -0400 (Fri, 18 Aug 2006)
New Revision: 10284
Modified:
trunk/HibernateExt/ejb/lib/ejb3-persistence.jar
trunk/HibernateExt/ejb/lib/hibernate-annotations.jar
trunk/HibernateExt/ejb/lib/jboss-archive-browsing.jar
trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/Version.java
Log:
jars
Modified: trunk/HibernateExt/ejb/lib/ejb3-persistence.jar
===================================================================
(Binary files differ)
Modified: trunk/HibernateExt/ejb/lib/hibernate-annotations.jar
===================================================================
(Binary files differ)
Modified: trunk/HibernateExt/ejb/lib/jboss-archive-browsing.jar
===================================================================
(Binary files differ)
Modified: trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/Version.java
===================================================================
--- trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/Version.java 2006-08-18 19:53:41 UTC (rev 10283)
+++ trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/Version.java 2006-08-18 19:54:07 UTC (rev 10284)
@@ -8,7 +8,7 @@
* @author Emmanuel Bernard
*/
public class Version {
- public static String VERSION = "3.2.0.CR1";
+ public static String VERSION = "3.2.0.CR2";
private static Log log = LogFactory.getLog( Version.class );
static {
19 years, 2 months
Hibernate SVN: r10283 - in trunk/HibernateExt/metadata: lib src/java/org/hibernate/cfg src/java/org/hibernate/cfg/annotations src/test/org/hibernate/test/annotations src/test/org/hibernate/test/annotations/idmanytoone
by hibernate-commits@lists.jboss.org
Author: epbernard
Date: 2006-08-18 15:53:41 -0400 (Fri, 18 Aug 2006)
New Revision: 10283
Added:
trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/idmanytoone/
trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/idmanytoone/Card.java
trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/idmanytoone/CardField.java
trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/idmanytoone/CardKey.java
trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/idmanytoone/IdManyToOne.java
trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/idmanytoone/Project.java
Modified:
trunk/HibernateExt/metadata/lib/ejb3-persistence.jar
trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationBinder.java
trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationConfiguration.java
trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/FkSecondPass.java
trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/TableBinder.java
trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/Version.java
Log:
ANN-382 Order FK setup to make it handle all non circular graphs
Modified: trunk/HibernateExt/metadata/lib/ejb3-persistence.jar
===================================================================
(Binary files differ)
Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationBinder.java
===================================================================
--- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationBinder.java 2006-08-18 15:17:00 UTC (rev 10282)
+++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationBinder.java 2006-08-18 19:53:41 UTC (rev 10283)
@@ -1754,7 +1754,7 @@
mappings.addSecondPass(
new FkSecondPass(
value, columns,
- !optional && unique, //cannot have nullabe and unique on certain DBs
+ !optional && unique, //cannot have nullabe and unique on certain DBs like Derby
path, mappings
)
);
Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationConfiguration.java
===================================================================
--- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationConfiguration.java 2006-08-18 15:17:00 UTC (rev 10282)
+++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationConfiguration.java 2006-08-18 19:53:41 UTC (rev 10283)
@@ -278,20 +278,11 @@
}
caches.clear();
- log.debug( "processing manytoone fk mappings" );
+ processFkSecondPassInOrder();
Iterator iter = secondPasses.iterator();
while ( iter.hasNext() ) {
SecondPass sp = (SecondPass) iter.next();
//do the second pass of fk before the others and remove them
- if ( sp instanceof FkSecondPass ) {
- sp.doSecondPass( classes );
- iter.remove();
- }
- }
- iter = secondPasses.iterator();
- while ( iter.hasNext() ) {
- SecondPass sp = (SecondPass) iter.next();
- //do the second pass of fk before the others and remove them
if ( sp instanceof CreateKeySecondPass ) {
sp.doSecondPass( classes );
iter.remove();
@@ -330,6 +321,68 @@
}
}
+ private void processFkSecondPassInOrder() {
+ log.debug( "processing manytoone fk mappings" );
+ Iterator iter = secondPasses.iterator();
+ /* We need to process FKSecond pass trying to resolve any
+ * graph circularity (ie PK made of a many to one linking to
+ * an entity having a PK made of a ManyToOne ...
+ */
+ Set fkSecondPasses = new HashSet();
+ while ( iter.hasNext() ) {
+ SecondPass sp = (SecondPass) iter.next();
+ //do the second pass of fk before the others and remove them
+ if ( sp instanceof FkSecondPass ) {
+ fkSecondPasses.add(sp);
+ iter.remove();
+ }
+ }
+ if (fkSecondPasses.size() > 0) {
+ Map<String, Set<String>> isADependencyOf = new HashMap<String, Set<String>>();
+ List orderedFkSecondPasses = new ArrayList( fkSecondPasses.size() );
+ List orderedTable = new ArrayList( fkSecondPasses.size() );
+ Iterator it = fkSecondPasses.iterator();
+ while ( it.hasNext() ) {
+ FkSecondPass sp = (FkSecondPass) it.next();
+ String referenceEntityName = sp.getValue().getReferencedEntityName();
+ String dependentTable = getClassMapping( referenceEntityName ).getTable().getQuotedName();
+ if ( ! isADependencyOf.containsKey( dependentTable ) ) {
+ isADependencyOf.put( dependentTable, new HashSet<String>() );
+ }
+ String table = sp.getValue().getTable().getQuotedName();
+ isADependencyOf.get( dependentTable ).add( table );
+ int beAfter = orderedTable.indexOf( dependentTable );
+ int beBefore = orderedFkSecondPasses.size();
+ Set<String> dependencies = isADependencyOf.get( table );
+ if (dependencies != null) {
+ for ( String tableDep : dependencies ) {
+ //for each declared dependency take the lowest index
+ int index = orderedTable.indexOf( tableDep );
+ //index = -1 when we have a self dependency
+ beBefore = index != -1 && index < beBefore ? index : beBefore;
+ }
+ }
+ int currentIndex = orderedTable.indexOf( table );
+ if (beBefore < beAfter ||
+ (currentIndex != -1 && ( currentIndex < beAfter || currentIndex > beBefore ) )
+ ) {
+ StringBuilder sb = new StringBuilder("Foreign key circularity dependency involving the following tables: ");
+ sb.append( table );
+ if (beAfter > -1) sb.append(", ").append( dependentTable );
+ if ( beBefore < orderedFkSecondPasses.size() ) sb.append(", ").append( orderedTable.get(beBefore) );
+ throw new AnnotationException( sb.toString() );
+ }
+ currentIndex = currentIndex == -1 ? beBefore : currentIndex;
+ orderedTable.add( currentIndex, table );
+ orderedFkSecondPasses.add( currentIndex, sp );
+ }
+ it = orderedFkSecondPasses.listIterator();
+ while ( it.hasNext() ) {
+ ( (SecondPass) it.next() ).doSecondPass( classes );
+ }
+ }
+ }
+
private void processArtifactsOfType(String artifact) {
if ( "hbm".equalsIgnoreCase( artifact ) ) {
log.debug( "Process hbm files" );
Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/FkSecondPass.java
===================================================================
--- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/FkSecondPass.java 2006-08-18 15:17:00 UTC (rev 10282)
+++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/FkSecondPass.java 2006-08-18 19:53:41 UTC (rev 10283)
@@ -8,7 +8,7 @@
import org.hibernate.mapping.ManyToOne;
import org.hibernate.mapping.OneToOne;
import org.hibernate.mapping.PersistentClass;
-import org.hibernate.mapping.Value;
+import org.hibernate.mapping.ToOne;
/**
* Enable a proper set of the FK columns in respect with the id column order
@@ -18,13 +18,13 @@
* @author Emmanuel Bernard
*/
public class FkSecondPass implements SecondPass {
- private Value value;
+ private ToOne value;
private Ejb3JoinColumn[] columns;
private boolean unique;
private ExtendedMappings mappings;
private String path;
- FkSecondPass(Value value, Ejb3JoinColumn[] columns, boolean unique, String path, ExtendedMappings mappings) {
+ FkSecondPass(ToOne value, Ejb3JoinColumn[] columns, boolean unique, String path, ExtendedMappings mappings) {
this.mappings = mappings;
this.value = value;
this.columns = columns;
@@ -32,6 +32,10 @@
this.path = path;
}
+ public ToOne getValue() {
+ return value;
+ }
+
public void doSecondPass(java.util.Map persistentClasses) throws MappingException {
if ( value instanceof ManyToOne ) {
ManyToOne manyToOne = (ManyToOne) value;
Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/TableBinder.java
===================================================================
--- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/TableBinder.java 2006-08-18 15:17:00 UTC (rev 10282)
+++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/TableBinder.java 2006-08-18 19:53:41 UTC (rev 10283)
@@ -293,7 +293,7 @@
break;
}
}
- if ( match == false ) {
+ if ( !match ) {
throw new AnnotationException(
"Column name " + col.getName() + " of "
+ referencedEntity.getEntityName() + " not found in JoinColumns.referencedColumnName"
Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/Version.java
===================================================================
--- trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/Version.java 2006-08-18 15:17:00 UTC (rev 10282)
+++ trunk/HibernateExt/metadata/src/java/org/hibernate/cfg/annotations/Version.java 2006-08-18 19:53:41 UTC (rev 10283)
@@ -8,7 +8,7 @@
* @author Emmanuel Bernard
*/
public class Version {
- public static String VERSION = "3.2.0.CR1";
+ public static String VERSION = "3.2.0.CR2";
private static Log log = LogFactory.getLog( Version.class );
static {
Added: trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/idmanytoone/Card.java
===================================================================
--- trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/idmanytoone/Card.java 2006-08-18 15:17:00 UTC (rev 10282)
+++ trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/idmanytoone/Card.java 2006-08-18 19:53:41 UTC (rev 10283)
@@ -0,0 +1,29 @@
+//$Id: $
+package org.hibernate.test.annotations.idmanytoone;
+
+import java.io.Serializable;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Embeddable;
+import javax.persistence.ManyToOne;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Card {
+
+ @Id
+ private CardPrimaryKey primaryKey = new CardPrimaryKey();
+
+ @Embeddable
+ private class CardPrimaryKey implements Serializable {
+
+ @ManyToOne(optional = false)
+ private Project project;
+
+ //An other @ManyToOne is also present in the real model
+ //The problem still occurs even when i remove this relation, it was no use to kept it for describe the problem
+
+ }
+}
Added: trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/idmanytoone/CardField.java
===================================================================
--- trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/idmanytoone/CardField.java 2006-08-18 15:17:00 UTC (rev 10282)
+++ trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/idmanytoone/CardField.java 2006-08-18 19:53:41 UTC (rev 10283)
@@ -0,0 +1,32 @@
+//$Id: $
+package org.hibernate.test.annotations.idmanytoone;
+
+import java.io.Serializable;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+import javax.persistence.Embeddable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class CardField {
+
+ @Id
+ private PrimaryKey primaryKey = new PrimaryKey();
+
+ @ManyToOne
+ private Card cardtmp;
+
+ @Embeddable
+ private class PrimaryKey implements Serializable {
+
+ @ManyToOne(optional = false)
+ private Card card;
+
+ @ManyToOne(optional = false)
+ private CardKey key;
+ }
+}
+
Added: trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/idmanytoone/CardKey.java
===================================================================
--- trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/idmanytoone/CardKey.java 2006-08-18 15:17:00 UTC (rev 10282)
+++ trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/idmanytoone/CardKey.java 2006-08-18 19:53:41 UTC (rev 10283)
@@ -0,0 +1,16 @@
+//$Id: $
+package org.hibernate.test.annotations.idmanytoone;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class CardKey {
+ @Id
+ @GeneratedValue
+ private int id;
+}
Added: trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/idmanytoone/IdManyToOne.java
===================================================================
--- trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/idmanytoone/IdManyToOne.java 2006-08-18 15:17:00 UTC (rev 10282)
+++ trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/idmanytoone/IdManyToOne.java 2006-08-18 19:53:41 UTC (rev 10283)
@@ -0,0 +1,25 @@
+//$Id: $
+package org.hibernate.test.annotations.idmanytoone;
+
+import org.hibernate.Session;
+import org.hibernate.test.annotations.TestCase;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class IdManyToOne extends TestCase {
+ public void testFkCreationOrdering() throws Exception {
+ //no real test case, the sessionFactory building is tested
+ Session s = openSession();
+ s.close();
+ }
+
+ protected Class[] getMappings() {
+ return new Class[] {
+ CardKey.class,
+ CardField.class,
+ Card.class,
+ Project.class
+ };
+ }
+}
Added: trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/idmanytoone/Project.java
===================================================================
--- trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/idmanytoone/Project.java 2006-08-18 15:17:00 UTC (rev 10282)
+++ trunk/HibernateExt/metadata/src/test/org/hibernate/test/annotations/idmanytoone/Project.java 2006-08-18 19:53:41 UTC (rev 10283)
@@ -0,0 +1,17 @@
+//$Id: $
+package org.hibernate.test.annotations.idmanytoone;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Project {
+
+ @Id
+ @GeneratedValue
+ private int id;
+}
19 years, 2 months
Hibernate SVN: r10282 - trunk/HibernateExt/ejb/src/java/org/hibernate/ejb
by hibernate-commits@lists.jboss.org
Author: epbernard
Date: 2006-08-18 11:17:00 -0400 (Fri, 18 Aug 2006)
New Revision: 10282
Modified:
trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/AbstractEntityManagerImpl.java
trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/CurrentEntityManagerImpl.java
trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/EntityManagerImpl.java
trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/TransactionImpl.java
Log:
EJB-215 some access to the session must not go through the entitymanager close flag check
Modified: trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/AbstractEntityManagerImpl.java
===================================================================
--- trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/AbstractEntityManagerImpl.java 2006-08-17 21:29:50 UTC (rev 10281)
+++ trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/AbstractEntityManagerImpl.java 2006-08-18 15:17:00 UTC (rev 10282)
@@ -300,8 +300,17 @@
}
}
+ /**
+ * return a Session
+ * @throws IllegalStateException if the entity manager is closed
+ */
public abstract Session getSession();
+ /**
+ * Return a Session (even if the entity manager is closed
+ */
+ protected abstract Session getRawSession();
+
public EntityTransaction getTransaction() {
if ( transactionType == PersistenceUnitTransactionType.JTA ) {
throw new IllegalStateException( "JTA EntityManager cannot access a transactions" );
@@ -401,7 +410,7 @@
}
public boolean isTransactionInProgress() {
- return ( (SessionImplementor) getSession() ).isTransactionInProgress();
+ return ( (SessionImplementor) getRawSession() ).isTransactionInProgress();
}
protected void markAsRollback() {
@@ -410,9 +419,10 @@
tx.setRollbackOnly();
}
else {
+ //no explicit use of the tx. boudaries methods
if ( PersistenceUnitTransactionType.JTA == transactionType ) {
TransactionManager transactionManager =
- ( (SessionFactoryImplementor) getSession().getSessionFactory() ).getTransactionManager();
+ ( (SessionFactoryImplementor) getRawSession().getSessionFactory() ).getTransactionManager();
if ( transactionManager == null ) {
throw new PersistenceException(
"Using a JTA persistence context wo setting hibernate.transaction.manager_lookup_class"
@@ -442,7 +452,7 @@
final Transaction transaction = session.getTransaction();
if ( transaction != null && transaction instanceof JoinableCMTTransaction ) {
//can't handle it if not a joinnable transaction
- final JoinableCMTTransaction joinableCMTTransaction = (JoinableCMTTransaction) session.getTransaction();
+ final JoinableCMTTransaction joinableCMTTransaction = (JoinableCMTTransaction) transaction;
if ( joinableCMTTransaction.getStatus() == JoinableCMTTransaction.JoinStatus.JOINED ) {
log.debug( "Transaction already joined" );
@@ -580,7 +590,7 @@
if ( e instanceof StaleStateException ) {
if ( e instanceof StaleObjectStateException ) {
StaleObjectStateException sose = (StaleObjectStateException) e;
- Object entity = getSession().load( sose.getEntityName(), sose.getIdentifier() );
+ Object entity = getRawSession().load( sose.getEntityName(), sose.getIdentifier() );
throwPersistenceException( new OptimisticLockException( null, e, entity ) );
}
else {
Modified: trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/CurrentEntityManagerImpl.java
===================================================================
--- trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/CurrentEntityManagerImpl.java 2006-08-17 21:29:50 UTC (rev 10281)
+++ trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/CurrentEntityManagerImpl.java 2006-08-18 15:17:00 UTC (rev 10282)
@@ -45,6 +45,10 @@
return s;
}
+ protected Session getRawSession() {
+ return getSession();
+ }
+
public void close() {
throw new UnsupportedOperationException( "cannot close the JTA-bound EntityManager" );
}
@@ -53,7 +57,7 @@
//TODO Hum contradictory comments, I'm getting mad
//no need to force enlistment in the tx, a current session is always enlisted
//adjustFlushMode(); //don't adjust, can't be done on closed EM
- getSession().isOpen(); //to force enlistment in tx
+ getRawSession().isOpen(); //to force enlistment in tx
return true;
}
Modified: trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/EntityManagerImpl.java
===================================================================
--- trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/EntityManagerImpl.java 2006-08-17 21:29:50 UTC (rev 10281)
+++ trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/EntityManagerImpl.java 2006-08-18 15:17:00 UTC (rev 10282)
@@ -40,16 +40,17 @@
public Session getSession() {
if ( !open ) throw new IllegalStateException( "EntityManager is closed" );
+ return getRawSession();
+ }
+ protected Session getRawSession() {
if ( session == null ) {
session = sessionFactory.openSession();
if ( persistenceContextType == PersistenceContextType.TRANSACTION ) {
( (SessionImplementor) session ).setAutoClear( true );
}
}
-
return session;
-
}
public void close() {
@@ -64,7 +65,6 @@
}
public void afterCompletion(int i) {
- //TODO should I check for isOpen() ?
if ( session != null ) {
if ( session.isOpen() ) {
log.debug( "Closing entity manager after transaction completion" );
Modified: trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/TransactionImpl.java
===================================================================
--- trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/TransactionImpl.java 2006-08-17 21:29:50 UTC (rev 10281)
+++ trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/TransactionImpl.java 2006-08-18 15:17:00 UTC (rev 10282)
@@ -82,7 +82,7 @@
finally {
try {
if (entityManager != null) {
- Session session = ( (HibernateEntityManager) entityManager ).getSession();
+ Session session = getSession();
if ( session != null && session.isOpen() ) session.clear();
}
}
19 years, 2 months
Hibernate SVN: r10281 - trunk/HibernateExt/ejb/src/java/org/hibernate/ejb
by hibernate-commits@lists.jboss.org
Author: epbernard
Date: 2006-08-17 17:29:50 -0400 (Thu, 17 Aug 2006)
New Revision: 10281
Modified:
trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/QueryImpl.java
Log:
EJB-216 getSingleResult must be implemented using list() and not uniqueResult()
Modified: trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/QueryImpl.java
===================================================================
--- trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/QueryImpl.java 2006-08-17 19:36:54 UTC (rev 10280)
+++ trunk/HibernateExt/ejb/src/java/org/hibernate/ejb/QueryImpl.java 2006-08-17 21:29:50 UTC (rev 10281)
@@ -11,6 +11,7 @@
import javax.persistence.TemporalType;
import static javax.persistence.TemporalType.*;
import javax.persistence.TransactionRequiredException;
+import javax.persistence.NonUniqueResultException;
import org.hibernate.CacheMode;
import org.hibernate.FlushMode;
@@ -76,13 +77,17 @@
public Object getSingleResult() {
try {
- Object result = query.uniqueResult();
-
- if ( result == null ) {
+ List result = query.list();
+ if ( result.size() == 0 ) {
em.throwPersistenceException( new NoResultException( "No entity found for query" ) );
}
-
- return result;
+ else if ( result.size() > 1 ) {
+ em.throwPersistenceException( new NonUniqueResultException( "result returns " + result.size() + " elements") );
+ }
+ else {
+ return result.get(0);
+ }
+ return null; //should never happen
}
catch (QueryExecutionRequestException he) {
throw new IllegalStateException(he);
19 years, 2 months