Hibernate SVN: r18709 - core/trunk/core/src/main/java/org/hibernate/dialect.
by hibernate-commits@lists.jboss.org
Author: stliu
Date: 2010-02-06 01:33:14 -0500 (Sat, 06 Feb 2010)
New Revision: 18709
Modified:
core/trunk/core/src/main/java/org/hibernate/dialect/IngresDialect.java
Log:
HHH-4886 Merge minor change from IngresDialect.java from 3.3.2 for Ingres 9.2 compatibility
Modified: core/trunk/core/src/main/java/org/hibernate/dialect/IngresDialect.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/dialect/IngresDialect.java 2010-02-05 23:33:28 UTC (rev 18708)
+++ core/trunk/core/src/main/java/org/hibernate/dialect/IngresDialect.java 2010-02-06 06:33:14 UTC (rev 18709)
@@ -33,11 +33,11 @@
import org.hibernate.dialect.function.VarArgsSQLFunction;
/**
- * An Ingres SQL dialect.
+ * An SQL dialect for Ingres 9.2.
* <p/>
* Known limitations:
- * - only supports simple constants or columns on the left side of an IN, making (1,2,3) in (...) or (<subselect) in (...) non-supported
- * - supports only 31 digits in decimal
+ * - only supports simple constants or columns on the left side of an IN, making (1,2,3) in (...) or (<subselect>) in (...) non-supported
+ * - supports only 39 digits in decimal
*
* @author Ian Booth, Bruce Lunsford, Max Rydahl Andersen
*/
@@ -100,6 +100,7 @@
registerFunction( "intextract", new StandardSQLFunction( "intextract", Hibernate.INTEGER ) );
registerFunction( "left", new StandardSQLFunction( "left", Hibernate.STRING ) );
registerFunction( "locate", new SQLFunctionTemplate( Hibernate.LONG, "locate(?1, ?2)" ) );
+ registerFunction( "length", new StandardSQLFunction( "length", Hibernate.LONG ) );
registerFunction( "ln", new StandardSQLFunction( "ln", Hibernate.DOUBLE ) );
registerFunction( "log", new StandardSQLFunction( "log", Hibernate.DOUBLE ) );
registerFunction( "lower", new StandardSQLFunction( "lower" ) );
14 years, 3 months
Hibernate SVN: r18708 - in core/trunk/annotations/src: test/java/org/hibernate/test/annotations/derivedidentities/e5 and 3 other directories.
by hibernate-commits@lists.jboss.org
Author: epbernard
Date: 2010-02-05 18:33:28 -0500 (Fri, 05 Feb 2010)
New Revision: 18708
Added:
core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e5/a/
core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e5/a/DerivedIdentityIdClassParentSameIdTypeIdClassDepTest.java
core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e5/a/MedicalHistory.java
core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e5/a/Person.java
core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e5/a/PersonId.java
core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e6/a/
core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e6/a/DerivedIdentityEmbeddedIdParentSameIdTypeIdClassDepTest.java
core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e6/a/MedicalHistory.java
core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e6/a/Person.java
core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e6/a/PersonId.java
Modified:
core/trunk/annotations/src/main/java/org/hibernate/cfg/AnnotationBinder.java
core/trunk/annotations/src/main/java/org/hibernate/cfg/ColumnsBuilder.java
Log:
HHH-4848 finish support for derived identity Yeah! More specifically @IdClass on dependent where the @IdClass points to the associated entity id type
Modified: core/trunk/annotations/src/main/java/org/hibernate/cfg/AnnotationBinder.java
===================================================================
--- core/trunk/annotations/src/main/java/org/hibernate/cfg/AnnotationBinder.java 2010-02-05 22:02:36 UTC (rev 18707)
+++ core/trunk/annotations/src/main/java/org/hibernate/cfg/AnnotationBinder.java 2010-02-05 23:33:28 UTC (rev 18708)
@@ -683,36 +683,138 @@
final boolean subclassAndSingleTableStrategy = inheritanceState.getType() == InheritanceType.SINGLE_TABLE
&& inheritanceState.hasParents();
- //process idclass if any
- Set<String> idProperties = new HashSet<String>();
+ Set<String> idPropertiesIfIdClass = new HashSet<String>();
+ boolean isIdClass = mapAsIdClass(
+ inheritanceStatePerClass,
+ inheritanceState,
+ persistentClass,
+ entityBinder,
+ propertyHolder,
+ elementsToProcess,
+ idPropertiesIfIdClass,
+ mappings
+ );
+
+ if (!isIdClass) {
+ entityBinder.setWrapIdsInEmbeddedComponents( elementsToProcess.getIdPropertyCount() > 1 );
+ }
+
+ processIdPropertiesIfNotAlready(
+ inheritanceStatePerClass,
+ mappings,
+ persistentClass,
+ entityBinder,
+ propertyHolder,
+ classGenerators,
+ elementsToProcess,
+ subclassAndSingleTableStrategy,
+ idPropertiesIfIdClass
+ );
+
+ if ( !inheritanceState.hasParents() ) {
+ final RootClass rootClass = (RootClass) persistentClass;
+ mappings.addSecondPass( new CreateKeySecondPass( rootClass ) );
+ }
+ else {
+ superEntity.addSubclass( (Subclass) persistentClass );
+ }
+
+ mappings.addClass( persistentClass );
+
+ //Process secondary tables and complementary definitions (ie o.h.a.Table)
+ mappings.addSecondPass( new SecondaryTableSecondPass( entityBinder, propertyHolder, clazzToProcess ) );
+
+ //add process complementary Table definition (index & all)
+ entityBinder.processComplementaryTableDefinitions( clazzToProcess.getAnnotation( org.hibernate.annotations.Table.class ) );
+ entityBinder.processComplementaryTableDefinitions( clazzToProcess.getAnnotation( org.hibernate.annotations.Tables.class ) );
+
+ }
+
+ private static void processIdPropertiesIfNotAlready(Map<XClass, InheritanceState> inheritanceStatePerClass, ExtendedMappings mappings, PersistentClass persistentClass, EntityBinder entityBinder, PropertyHolder propertyHolder, HashMap<String, IdGenerator> classGenerators, InheritanceState.ElementsToProcess elementsToProcess, boolean subclassAndSingleTableStrategy, Set<String> idPropertiesIfIdClass) {
+ Set<String> missingIdProperties = new HashSet<String>( idPropertiesIfIdClass );
+ for ( PropertyData propertyAnnotatedElement : elementsToProcess.getElements() ) {
+ String propertyName = propertyAnnotatedElement.getPropertyName();
+ if ( !idPropertiesIfIdClass.contains( propertyName ) ) {
+ processElementAnnotations(
+ propertyHolder,
+ subclassAndSingleTableStrategy ?
+ Nullability.FORCED_NULL :
+ Nullability.NO_CONSTRAINT,
+ propertyAnnotatedElement, classGenerators, entityBinder,
+ false, false, false, mappings, inheritanceStatePerClass
+ );
+ }
+ else {
+ missingIdProperties.remove( propertyName );
+ }
+ }
+
+ if ( missingIdProperties.size() != 0 ) {
+ StringBuilder missings = new StringBuilder();
+ for (String property : missingIdProperties) {
+ missings.append( property ).append( ", " );
+ }
+ throw new AnnotationException(
+ "Unable to find properties ("
+ + missings.substring( 0, missings.length() - 2 )
+ + ") in entity annotated with @IdClass:" + persistentClass.getEntityName()
+ );
+ }
+ }
+
+ private static boolean mapAsIdClass(Map<XClass, InheritanceState> inheritanceStatePerClass, InheritanceState inheritanceState, PersistentClass persistentClass, EntityBinder entityBinder, PropertyHolder propertyHolder, InheritanceState.ElementsToProcess elementsToProcess, Set<String> idPropertiesIfIdClass, ExtendedMappings mappings) {
+ /*
+ * We are looking for @IdClass
+ * In general we map the id class as identifier using the mapping metadata of the main entity's properties
+ * and we create an identifier mapper containing the id properties of the main entity
+ *
+ * In JPA 2, there is a shortcut if the id class is the Pk of the associated class pointed to by the id
+ * it ought to be treated as an embedded and not a real IdClass (at least in the Hibernate's internal way
+ */
XClass classWithIdClass = inheritanceState.getClassWithIdClass(false);
if ( classWithIdClass != null ) {
IdClass idClass = classWithIdClass.getAnnotation( IdClass.class );
XClass compositeClass = mappings.getReflectionManager().toXClass( idClass.value() );
- boolean isComponent = true;
- AccessType propertyAccessor = entityBinder.getPropertyAccessor( compositeClass );
- String generatorType = "assigned";
- String generator = BinderHelper.ANNOTATION_STRING_DEFAULT;
PropertyData inferredData = new PropertyPreloadedData(
entityBinder.getPropertyAccessType(), "id", compositeClass
);
PropertyData baseInferredData = new PropertyPreloadedData(
entityBinder.getPropertyAccessType(), "id", classWithIdClass
);
- HashMap<String, IdGenerator> localGenerators = new HashMap<String, IdGenerator>();
+ AccessType propertyAccessor = entityBinder.getPropertyAccessor( compositeClass );
+ //In JPA 2, there is a shortcut if the IdClass is the Pk of the associated class pointed to by the id
+ //it ought to be treated as an embedded and not a real IdClass (at least in the Hibernate's internal way
+ final boolean isFakeIdClass = isIdClassPkOfTheAssociatedEntity(
+ elementsToProcess,
+ compositeClass,
+ inferredData,
+ baseInferredData,
+ propertyAccessor,
+ inheritanceStatePerClass,
+ mappings
+ );
+
+ if ( isFakeIdClass ) {
+ return false;
+ }
+
+ boolean isComponent = true;
+ String generatorType = "assigned";
+ String generator = BinderHelper.ANNOTATION_STRING_DEFAULT;
+
boolean ignoreIdAnnotations = entityBinder.isIgnoreIdAnnotations();
entityBinder.setIgnoreIdAnnotations( true );
propertyHolder.setInIdClass( true );
- bindId(
+ bindIdClass(
generatorType,
generator,
inferredData,
baseInferredData,
null,
propertyHolder,
- localGenerators,
isComponent,
- propertyAccessor, entityBinder,
+ propertyAccessor,
+ entityBinder,
true,
false,
mappings,
@@ -723,27 +825,28 @@
propertyAccessor, "_identifierMapper", compositeClass
);
Component mapper = fillComponent(
- propertyHolder,
- inferredData,
- baseInferredData,
- propertyAccessor,
- false,
- entityBinder,
- true,
- true,
- false,
- mappings,
- inheritanceStatePerClass
+ propertyHolder,
+ inferredData,
+ baseInferredData,
+ propertyAccessor,
+ false,
+ entityBinder,
+ true,
+ true,
+ false,
+ mappings,
+ inheritanceStatePerClass
);
entityBinder.setIgnoreIdAnnotations( ignoreIdAnnotations );
persistentClass.setIdentifierMapper( mapper );
//If id definition is on a mapped superclass, update the mapping
- final org.hibernate.mapping.MappedSuperclass superclass = BinderHelper.getMappedSuperclassOrNull(
- inferredData.getDeclaringClass(),
- inheritanceStatePerClass,
- mappings
- );
+ final org.hibernate.mapping.MappedSuperclass superclass =
+ BinderHelper.getMappedSuperclassOrNull(
+ inferredData.getDeclaringClass(),
+ inheritanceStatePerClass,
+ mappings
+ );
if (superclass != null) {
superclass.setDeclaredIdentifierMapper(mapper);
}
@@ -764,60 +867,50 @@
Iterator properties = mapper.getPropertyIterator();
while ( properties.hasNext() ) {
- idProperties.add( ( (Property) properties.next() ).getName() );
+ idPropertiesIfIdClass.add( ( (Property) properties.next() ).getName() );
}
+ return true;
}
else {
- entityBinder.setWrapIdsInEmbeddedComponents( elementsToProcess.getIdPropertyCount() > 1 );
+ return false;
}
- Set<String> missingIdProperties = new HashSet<String>( idProperties );
- for (PropertyData propertyAnnotatedElement : elementsToProcess.getElements() ) {
- String propertyName = propertyAnnotatedElement.getPropertyName();
- if ( !idProperties.contains( propertyName ) ) {
- processElementAnnotations(
- propertyHolder,
- subclassAndSingleTableStrategy ?
- Nullability.FORCED_NULL :
- Nullability.NO_CONSTRAINT,
- propertyAnnotatedElement.getProperty(),
- propertyAnnotatedElement, classGenerators, entityBinder,
- false, false, false, mappings, inheritanceStatePerClass
- );
+ }
+
+ private static boolean isIdClassPkOfTheAssociatedEntity(
+ InheritanceState.ElementsToProcess elementsToProcess,
+ XClass compositeClass,
+ PropertyData inferredData,
+ PropertyData baseInferredData,
+ AccessType propertyAccessor,
+ Map<XClass, InheritanceState> inheritanceStatePerClass,
+ ExtendedMappings mappings) {
+ if ( elementsToProcess.getIdPropertyCount() == 1 ) {
+ final PropertyData idPropertyOnBaseClass = getUniqueIdPropertyFromBaseClass(
+ inferredData, baseInferredData, propertyAccessor, mappings
+ );
+ final InheritanceState state = inheritanceStatePerClass.get( idPropertyOnBaseClass.getClassOrElement() );
+ if (state == null) {
+ return false; //while it is likely a user error, let's consider it is something that might happen
}
+ final XClass associatedClassWithIdClass = state.getClassWithIdClass( true );
+ if ( associatedClassWithIdClass == null ) {
+ //we cannot know for sure here unless we try and find the @EmbeddedId
+ //Let's not do this thorough checking but do some extra validation
+ final XProperty property = idPropertyOnBaseClass.getProperty();
+ return property.isAnnotationPresent( ManyToOne.class )
+ || property.isAnnotationPresent( OneToOne.class );
+
+ }
else {
- missingIdProperties.remove( propertyName );
+ final XClass idClass = mappings.getReflectionManager().toXClass(
+ associatedClassWithIdClass.getAnnotation( IdClass.class ).value()
+ );
+ return idClass.equals( compositeClass );
}
}
-
- if ( missingIdProperties.size() != 0 ) {
- StringBuilder missings = new StringBuilder();
- for (String property : missingIdProperties) {
- missings.append( property ).append( ", " );
- }
- throw new AnnotationException(
- "Unable to find properties ("
- + missings.substring( 0, missings.length() - 2 )
- + ") in entity annotated with @IdClass:" + persistentClass.getEntityName()
- );
- }
-
- if ( !inheritanceState.hasParents() ) {
- final RootClass rootClass = (RootClass) persistentClass;
- mappings.addSecondPass( new CreateKeySecondPass( rootClass ) );
- }
else {
- superEntity.addSubclass( (Subclass) persistentClass );
+ return false;
}
-
- mappings.addClass( persistentClass );
-
- //Process secondary tables and complementary definitions (ie o.h.a.Table)
- mappings.addSecondPass( new SecondaryTableSecondPass( entityBinder, propertyHolder, clazzToProcess ) );
-
- //add process complementary Table definition (index & all)
- entityBinder.processComplementaryTableDefinitions( clazzToProcess.getAnnotation( org.hibernate.annotations.Table.class ) );
- entityBinder.processComplementaryTableDefinitions( clazzToProcess.getAnnotation( org.hibernate.annotations.Tables.class ) );
-
}
private static Cache determineCacheSettings(XClass clazzToProcess, ExtendedMappings mappings) {
@@ -1230,7 +1323,7 @@
* Process annotation of a particular property
*/
private static void processElementAnnotations(
- PropertyHolder propertyHolder, Nullability nullability, XProperty property,
+ PropertyHolder propertyHolder, Nullability nullability,
PropertyData inferredData, HashMap<String, IdGenerator> classGenerators,
EntityBinder entityBinder, boolean isIdentifierMapper,
boolean isComponentEmbedded, boolean inSecondPass, ExtendedMappings mappings,
@@ -1246,6 +1339,7 @@
"Processing annotations of {}.{}", propertyHolder.getEntityName(), inferredData.getPropertyName()
);
+ final XProperty property = inferredData.getProperty();
if ( property.isAnnotationPresent( Parent.class ) ) {
if ( propertyHolder.isComponent() ) {
propertyHolder.setParentProperty( property.getName() );
@@ -1794,7 +1888,7 @@
final PropertyData mapsIdProperty = BinderHelper.getPropertyOverriddenByMapperOrMapsId(
isId, propertyHolder, property.getName(), mappings
);
- HashMap<String, IdGenerator> localGenerators = (HashMap<String, IdGenerator>) classGenerators.clone();
+ Map<String, IdGenerator> localGenerators = (HashMap<String, IdGenerator>) classGenerators.clone();
final IdGenerator foreignGenerator = new IdGenerator();
foreignGenerator.setIdentifierGeneratorStrategy( "assigned" );
foreignGenerator.setName( "Hibernate-local--foreign generator" );
@@ -2061,7 +2155,7 @@
inferredData, propertyHolder, mappings
);
- final XClass entityXClass = inferredData.getPropertyClass();
+ final XClass xClassProcessed = inferredData.getPropertyClass();
List<PropertyData> classElements = new ArrayList<PropertyData>();
XClass returnedClassOrElement = inferredData.getClassOrElement();
@@ -2069,11 +2163,11 @@
Map<String, PropertyData> orderedBaseClassElements = new HashMap<String, PropertyData>();
XClass baseReturnedClassOrElement;
if(baseInferredData != null) {
- baseClassElements = new ArrayList<PropertyData>();
- baseReturnedClassOrElement = baseInferredData.getClassOrElement();
- bindTypeDefs(baseReturnedClassOrElement, mappings);
- PropertyContainer propContainer = new PropertyContainer( baseReturnedClassOrElement, entityXClass );
- addElementsOfClass( baseClassElements, propertyAccessor, propContainer, mappings );
+ baseClassElements = new ArrayList<PropertyData>();
+ baseReturnedClassOrElement = baseInferredData.getClassOrElement();
+ bindTypeDefs(baseReturnedClassOrElement, mappings);
+ PropertyContainer propContainer = new PropertyContainer( baseReturnedClassOrElement, xClassProcessed );
+ addElementsOfClass( baseClassElements, propertyAccessor, propContainer, mappings );
for (PropertyData element : baseClassElements) {
orderedBaseClassElements.put( element.getPropertyName(), element );
}
@@ -2081,39 +2175,43 @@
//embeddable elements can have type defs
bindTypeDefs(returnedClassOrElement, mappings);
- PropertyContainer propContainer = new PropertyContainer( returnedClassOrElement, entityXClass );
+ PropertyContainer propContainer = new PropertyContainer( returnedClassOrElement, xClassProcessed );
addElementsOfClass( classElements, propertyAccessor, propContainer, mappings);
//add elements of the embeddable superclass
- XClass superClass = entityXClass.getSuperclass();
+ XClass superClass = xClassProcessed.getSuperclass();
while ( superClass != null && superClass.isAnnotationPresent( MappedSuperclass.class ) ) {
//FIXME: proper support of typevariables incl var resolved at upper levels
- propContainer = new PropertyContainer( superClass, entityXClass );
+ propContainer = new PropertyContainer( superClass, xClassProcessed );
addElementsOfClass( classElements, propertyAccessor, propContainer, mappings );
superClass = superClass.getSuperclass();
}
if ( baseClassElements != null ) {
//useful to avoid breaking pre JPA 2 mappings
- if ( !hasAnnotationsOnIdClass( entityXClass ) ) {
+ if ( !hasAnnotationsOnIdClass( xClassProcessed ) ) {
for ( int i = 0; i < classElements.size(); i++ ) {
final PropertyData idClassPropertyData = classElements.get( i );
final PropertyData entityPropertyData = orderedBaseClassElements.get( idClassPropertyData.getPropertyName() );
- //FIXME
- if ( entityPropertyData != null ) {
- if ( propertyHolder.isInIdClass() ) {
- if ( entityPropertyData.getProperty().isAnnotationPresent( ManyToOne.class )
- || entityPropertyData.getProperty().isAnnotationPresent( OneToOne.class ) ) {
- //don't replace here as we need to use the actual original return type
- //the annotation overriding will be dealt with by a mechanism similar to @MapsId
- }
- else {
- classElements.set( i, entityPropertyData ); //this works since they are in the same order
- }
+ if ( propertyHolder.isInIdClass() ) {
+ if (entityPropertyData == null) {
+ throw new AnnotationException (
+ "Property of @IdClass not found in entity "
+ + baseInferredData.getPropertyClass().getName() + ": "
+ + idClassPropertyData.getPropertyName()
+ );
}
+ if ( entityPropertyData.getProperty().isAnnotationPresent( ManyToOne.class )
+ || entityPropertyData.getProperty().isAnnotationPresent( OneToOne.class ) ) {
+ //don't replace here as we need to use the actual original return type
+ //the annotation overriding will be dealt with by a mechanism similar to @MapsId
+ }
else {
classElements.set( i, entityPropertyData ); //this works since they are in the same order
}
}
+ else {
+ classElements.set( i, entityPropertyData ); //this works since they are in the same order
+ }
}
}
}
@@ -2122,7 +2220,7 @@
subHolder, isNullable ?
Nullability.NO_CONSTRAINT :
Nullability.FORCED_NOT_NULL,
- propertyAnnotatedElement.getProperty(), propertyAnnotatedElement,
+ propertyAnnotatedElement,
new HashMap<String, IdGenerator>(), entityBinder, isIdentifierMapper, isComponentEmbedded,
inSecondPass, mappings, inheritanceStatePerClass
);
@@ -2131,7 +2229,7 @@
if(property.isAnnotationPresent(GeneratedValue.class) &&
property.isAnnotationPresent(Id.class) ) {
//clone classGenerator and override with local values
- HashMap<String, IdGenerator> localGenerators = new HashMap<String, IdGenerator>();
+ Map<String, IdGenerator> localGenerators = new HashMap<String, IdGenerator>();
localGenerators.putAll( buildLocalGenerators( property, mappings ) );
GeneratedValue generatedValue = property.getAnnotation( GeneratedValue.class );
@@ -2161,10 +2259,9 @@
return comp;
}
- private static void bindId(
+ private static void bindIdClass(
String generatorType, String generatorName, PropertyData inferredData,
PropertyData baseInferredData, Ejb3Column[] columns, PropertyHolder propertyHolder,
- Map<String, IdGenerator> localGenerators,
boolean isComposite,
AccessType propertyAccessor, EntityBinder entityBinder, boolean isEmbedded,
boolean isIdentifierMapper, ExtendedMappings mappings,
@@ -2185,6 +2282,7 @@
String persistentClassName = rootClass.getClassName();
SimpleValue id;
final String propertyName = inferredData.getPropertyName();
+ HashMap<String, IdGenerator> localGenerators = new HashMap<String, IdGenerator>();
if ( isComposite ) {
id = fillComponent(
propertyHolder, inferredData, baseInferredData, propertyAccessor,
@@ -2203,6 +2301,8 @@
setupComponentTuplizer( property, componentId );
}
else {
+ //TODO I think this branch is never used. Remove.
+
for (Ejb3Column column : columns) {
column.forceNotNull(); //this is an id
}
@@ -2244,6 +2344,16 @@
}
}
+ private static PropertyData getUniqueIdPropertyFromBaseClass(PropertyData inferredData, PropertyData baseInferredData, AccessType propertyAccessor, ExtendedMappings mappings) {
+ List<PropertyData> baseClassElements = new ArrayList<PropertyData>();
+ XClass baseReturnedClassOrElement = baseInferredData.getClassOrElement();
+ PropertyContainer propContainer = new PropertyContainer( baseReturnedClassOrElement, inferredData.getPropertyClass() );
+ addElementsOfClass( baseClassElements, propertyAccessor, propContainer, mappings );
+ //Id properties are on top and there is only one
+ final PropertyData idPropertyOnBaseClass = baseClassElements.get( 0 );
+ return idPropertyOnBaseClass;
+ }
+
private static void setupComponentTuplizer(XProperty property, Component component) {
if ( property == null ) return;
if ( property.isAnnotationPresent( Tuplizers.class ) ) {
Modified: core/trunk/annotations/src/main/java/org/hibernate/cfg/ColumnsBuilder.java
===================================================================
--- core/trunk/annotations/src/main/java/org/hibernate/cfg/ColumnsBuilder.java 2010-02-05 22:02:36 UTC (rev 18707)
+++ core/trunk/annotations/src/main/java/org/hibernate/cfg/ColumnsBuilder.java 2010-02-05 23:33:28 UTC (rev 18708)
@@ -185,11 +185,20 @@
Ejb3Column[] result = columns;
final PropertyData overridingProperty = BinderHelper.getPropertyOverriddenByMapperOrMapsId( isId, propertyHolder, property.getName(), mappings );
if ( overridingProperty != null ) {
- result = buildExplicitJoinColumns( overridingProperty.getProperty(), overridingProperty );
- if (result == null) {
- result = buildDefaultJoinColumnsForXToOne( overridingProperty.getProperty(), overridingProperty);
- }
+ result = buildExcplicitOrDefaultJoinColumn( overridingProperty );
}
return result;
}
+
+ /**
+ * useful to override a column either by @MapsId or by @IdClass
+ */
+ Ejb3Column[] buildExcplicitOrDefaultJoinColumn(PropertyData overridingProperty) {
+ Ejb3Column[] result;
+ result = buildExplicitJoinColumns( overridingProperty.getProperty(), overridingProperty );
+ if (result == null) {
+ result = buildDefaultJoinColumnsForXToOne( overridingProperty.getProperty(), overridingProperty);
+ }
+ return result;
+ }
}
Added: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e5/a/DerivedIdentityIdClassParentSameIdTypeIdClassDepTest.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e5/a/DerivedIdentityIdClassParentSameIdTypeIdClassDepTest.java (rev 0)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e5/a/DerivedIdentityIdClassParentSameIdTypeIdClassDepTest.java 2010-02-05 23:33:28 UTC (rev 18708)
@@ -0,0 +1,46 @@
+package org.hibernate.test.annotations.derivedidentities.e5.a;
+
+import org.hibernate.Session;
+import org.hibernate.junit.FailureExpected;
+import org.hibernate.test.annotations.TestCase;
+import org.hibernate.test.util.SchemaUtil;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class DerivedIdentityIdClassParentSameIdTypeIdClassDepTest extends TestCase {
+
+ public void testOneToOneExplicitJoinColumn() throws Exception {
+ assertTrue( SchemaUtil.isColumnPresent( "MedicalHistory", "FK1", getCfg() ) );
+ assertTrue( SchemaUtil.isColumnPresent( "MedicalHistory", "FK2", getCfg() ) );
+ assertTrue( ! SchemaUtil.isColumnPresent( "MedicalHistory", "firstname", getCfg() ) );
+ Person e = new Person();
+ e.firstName = "Emmanuel";
+ e.lastName = "Bernard";
+ Session s = openSession( );
+ s.getTransaction().begin();
+ s.persist( e );
+ MedicalHistory d = new MedicalHistory();
+ d.patient = e;
+ s.persist( d );
+ s.flush();
+ s.clear();
+ PersonId pId = new PersonId();
+ pId.firstName = e.firstName;
+ pId.lastName = e.lastName;
+ d = (MedicalHistory) s.get( MedicalHistory.class, pId);
+ assertEquals( pId.firstName, d.patient.firstName );
+ s.delete( d );
+ s.delete( d.patient );
+ s.getTransaction().rollback();
+ s.close();
+ }
+
+ @Override
+ protected Class<?>[] getAnnotatedClasses() {
+ return new Class<?>[] {
+ MedicalHistory.class,
+ Person.class
+ };
+ }
+}
Added: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e5/a/MedicalHistory.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e5/a/MedicalHistory.java (rev 0)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e5/a/MedicalHistory.java 2010-02-05 23:33:28 UTC (rev 18708)
@@ -0,0 +1,24 @@
+package org.hibernate.test.annotations.derivedidentities.e5.a;
+
+import java.io.Serializable;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.IdClass;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinColumns;
+import javax.persistence.OneToOne;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+(a)IdClass(PersonId.class)
+public class MedicalHistory implements Serializable {
+ @Id
+ @JoinColumns({
+ @JoinColumn(name = "FK1", referencedColumnName = "firstName"),
+ @JoinColumn(name = "FK2", referencedColumnName = "lastName")
+ })
+ @OneToOne
+ Person patient;
+}
Added: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e5/a/Person.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e5/a/Person.java (rev 0)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e5/a/Person.java 2010-02-05 23:33:28 UTC (rev 18708)
@@ -0,0 +1,16 @@
+package org.hibernate.test.annotations.derivedidentities.e5.a;
+
+import java.io.Serializable;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.IdClass;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+(a)IdClass(PersonId.class)
+public class Person {
+ @Id String firstName;
+ @Id String lastName;
+}
Added: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e5/a/PersonId.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e5/a/PersonId.java (rev 0)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e5/a/PersonId.java 2010-02-05 23:33:28 UTC (rev 18708)
@@ -0,0 +1,11 @@
+package org.hibernate.test.annotations.derivedidentities.e5.a;
+
+import java.io.Serializable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class PersonId implements Serializable {
+ String firstName;
+ String lastName;
+}
Added: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e6/a/DerivedIdentityEmbeddedIdParentSameIdTypeIdClassDepTest.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e6/a/DerivedIdentityEmbeddedIdParentSameIdTypeIdClassDepTest.java (rev 0)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e6/a/DerivedIdentityEmbeddedIdParentSameIdTypeIdClassDepTest.java 2010-02-05 23:33:28 UTC (rev 18708)
@@ -0,0 +1,47 @@
+package org.hibernate.test.annotations.derivedidentities.e6.a;
+
+import org.hibernate.Session;
+import org.hibernate.junit.FailureExpected;
+import org.hibernate.test.annotations.TestCase;
+import org.hibernate.test.util.SchemaUtil;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class DerivedIdentityEmbeddedIdParentSameIdTypeIdClassDepTest extends TestCase {
+
+ public void testOneToOneExplicitJoinColumn() throws Exception {
+ assertTrue( SchemaUtil.isColumnPresent( "MedicalHistory", "FK1", getCfg() ) );
+ assertTrue( SchemaUtil.isColumnPresent( "MedicalHistory", "FK2", getCfg() ) );
+ assertTrue( ! SchemaUtil.isColumnPresent( "MedicalHistory", "firstname", getCfg() ) );
+ Person e = new Person();
+ e.id = new PersonId();
+ e.id.firstName = "Emmanuel";
+ e.id.lastName = "Bernard";
+ Session s = openSession( );
+ s.getTransaction().begin();
+ s.persist( e );
+ MedicalHistory d = new MedicalHistory();
+ d.patient = e;
+ s.persist( d );
+ s.flush();
+ s.clear();
+ PersonId pId = new PersonId();
+ pId.firstName = e.id.firstName;
+ pId.lastName = e.id.lastName;
+ d = (MedicalHistory) s.get( MedicalHistory.class, pId );
+ assertEquals( pId.firstName, d.patient.id.firstName );
+ s.delete( d );
+ s.delete( d.patient );
+ s.getTransaction().commit();
+ s.close();
+ }
+
+ @Override
+ protected Class<?>[] getAnnotatedClasses() {
+ return new Class<?>[] {
+ MedicalHistory.class,
+ Person.class
+ };
+ }
+}
\ No newline at end of file
Added: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e6/a/MedicalHistory.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e6/a/MedicalHistory.java (rev 0)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e6/a/MedicalHistory.java 2010-02-05 23:33:28 UTC (rev 18708)
@@ -0,0 +1,26 @@
+package org.hibernate.test.annotations.derivedidentities.e6.a;
+
+import java.io.Serializable;
+import javax.persistence.EmbeddedId;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.IdClass;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinColumns;
+import javax.persistence.MapsId;
+import javax.persistence.OneToOne;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+(a)IdClass(PersonId.class)
+public class MedicalHistory implements Serializable {
+ @Id
+ @JoinColumns({
+ @JoinColumn(name = "FK1", referencedColumnName = "firstName"),
+ @JoinColumn(name = "FK2", referencedColumnName = "lastName")
+ })
+ @OneToOne
+ Person patient;
+}
Added: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e6/a/Person.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e6/a/Person.java (rev 0)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e6/a/Person.java 2010-02-05 23:33:28 UTC (rev 18708)
@@ -0,0 +1,13 @@
+package org.hibernate.test.annotations.derivedidentities.e6.a;
+
+import javax.persistence.EmbeddedId;
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Person {
+ @EmbeddedId
+ PersonId id;
+}
Added: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e6/a/PersonId.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e6/a/PersonId.java (rev 0)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e6/a/PersonId.java 2010-02-05 23:33:28 UTC (rev 18708)
@@ -0,0 +1,13 @@
+package org.hibernate.test.annotations.derivedidentities.e6.a;
+
+import java.io.Serializable;
+import javax.persistence.Embeddable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Embeddable
+public class PersonId implements Serializable {
+ String firstName;
+ String lastName;
+}
14 years, 3 months
Hibernate SVN: r18707 - core/trunk/annotations/src/test/java/org/hibernate/test/annotations/id/generationmappings.
by hibernate-commits@lists.jboss.org
Author: steve.ebersole(a)jboss.com
Date: 2010-02-05 17:02:36 -0500 (Fri, 05 Feb 2010)
New Revision: 18707
Modified:
core/trunk/annotations/src/test/java/org/hibernate/test/annotations/id/generationmappings/NewGeneratorMappingsTest.java
Log:
HHH-4884 - Fix binding of @TableGenerator#initialValue into org.hibernate.id.enhanced.TableGenerator
Modified: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/id/generationmappings/NewGeneratorMappingsTest.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/id/generationmappings/NewGeneratorMappingsTest.java 2010-02-05 21:51:24 UTC (rev 18706)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/id/generationmappings/NewGeneratorMappingsTest.java 2010-02-05 22:02:36 UTC (rev 18707)
@@ -113,8 +113,8 @@
assertEquals( TableGenerator.DEF_SEGMENT_COLUMN, tabGenerator.getSegmentColumnName() );
assertEquals( "MINIMAL_TBL", tabGenerator.getSegmentValue() );
assertEquals( TableGenerator.DEF_VALUE_COLUMN, tabGenerator.getValueColumnName() );
- // 0 is the annotation default
- assertEquals( 0, tabGenerator.getInitialValue() );
+ // 0 is the annotation default, but its expected to be treated as 1
+ assertEquals( 1, tabGenerator.getInitialValue() );
// 50 is the annotation default
assertEquals( 50, tabGenerator.getIncrementSize() );
assertTrue( OptimizerFactory.PooledOptimizer.class.isInstance( tabGenerator.getOptimizer() ) );
14 years, 3 months
Hibernate SVN: r18706 - in core/trunk: annotations/src/test/java/org/hibernate/test/annotations/embedded/one2many and 2 other directories.
by hibernate-commits@lists.jboss.org
Author: steve.ebersole(a)jboss.com
Date: 2010-02-05 16:51:24 -0500 (Fri, 05 Feb 2010)
New Revision: 18706
Modified:
core/trunk/annotations/src/test/java/org/hibernate/test/annotations/embedded/many2one/EmbeddableWithMany2OneTest.java
core/trunk/annotations/src/test/java/org/hibernate/test/annotations/embedded/one2many/EmbeddableWithOne2ManyTest.java
core/trunk/core/src/main/java/org/hibernate/hql/ast/tree/DotNode.java
core/trunk/core/src/main/java/org/hibernate/hql/ast/tree/FromClause.java
core/trunk/testsuite/src/test/java/org/hibernate/test/hql/ASTParserLoadingTest.java
core/trunk/testsuite/src/test/java/org/hibernate/test/hql/ComponentContainer.java
Log:
HHH-4883 - Unable to join across a component
Modified: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/embedded/many2one/EmbeddableWithMany2OneTest.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/embedded/many2one/EmbeddableWithMany2OneTest.java 2010-02-05 20:33:14 UTC (rev 18705)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/embedded/many2one/EmbeddableWithMany2OneTest.java 2010-02-05 21:51:24 UTC (rev 18706)
@@ -40,7 +40,6 @@
return new Class[] { Person.class, Country.class };
}
- @FailureExpected( jiraKey = "HHH-4883")
public void testJoinAcrossEmbedded() {
Session session = openSession();
session.beginTransaction();
Modified: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/embedded/one2many/EmbeddableWithOne2ManyTest.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/embedded/one2many/EmbeddableWithOne2ManyTest.java 2010-02-05 20:33:14 UTC (rev 18705)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/embedded/one2many/EmbeddableWithOne2ManyTest.java 2010-02-05 21:51:24 UTC (rev 18706)
@@ -43,6 +43,8 @@
@FailureExpected( jiraKey = "HHH-4883")
public void testJoinAcrossEmbedded() {
+ // NOTE : this may or may not work now with HHH-4883 fixed,
+ // but i cannot do this checking until HHH-4599 is done.
Session session = openSession();
session.beginTransaction();
session.createQuery( "from Person p join p.name.aliases a where a.source = 'FBI'" )
Modified: core/trunk/core/src/main/java/org/hibernate/hql/ast/tree/DotNode.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/hql/ast/tree/DotNode.java 2010-02-05 20:33:14 UTC (rev 18705)
+++ core/trunk/core/src/main/java/org/hibernate/hql/ast/tree/DotNode.java 2010-02-05 21:51:24 UTC (rev 18706)
@@ -445,9 +445,20 @@
JoinSequence joinSequence = getSessionFactoryHelper()
.createJoinSequence( impliedJoin, propertyType, tableAlias, joinType, joinColumns );
+ // If the lhs of the join is a "component join", we need to go back to the
+ // first non-component-join as the origin to properly link aliases and
+ // join columns
+ FromElement lhsFromElement = getLhs().getFromElement();
+ while ( lhsFromElement != null && ComponentJoin.class.isInstance( lhsFromElement ) ) {
+ lhsFromElement = lhsFromElement.getOrigin();
+ }
+ if ( lhsFromElement == null ) {
+ throw new QueryException( "Unable to locate appropriate lhs" );
+ }
+
FromElementFactory factory = new FromElementFactory(
currentFromClause,
- getLhs().getFromElement(),
+ lhsFromElement,
joinPath,
classAlias,
joinColumns,
Modified: core/trunk/core/src/main/java/org/hibernate/hql/ast/tree/FromClause.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/hql/ast/tree/FromClause.java 2010-02-05 20:33:14 UTC (rev 18705)
+++ core/trunk/core/src/main/java/org/hibernate/hql/ast/tree/FromClause.java 2010-02-05 21:51:24 UTC (rev 18706)
@@ -275,7 +275,7 @@
void addJoinByPathMap(String path, FromElement destination) {
if ( log.isDebugEnabled() ) {
- log.debug( "addJoinByPathMap() : " + path + " -> " + destination );
+ log.debug( "addJoinByPathMap() : " + path + " -> " + destination.getDisplayText() );
}
fromElementsByPath.put( path, destination );
}
Modified: core/trunk/testsuite/src/test/java/org/hibernate/test/hql/ASTParserLoadingTest.java
===================================================================
--- core/trunk/testsuite/src/test/java/org/hibernate/test/hql/ASTParserLoadingTest.java 2010-02-05 20:33:14 UTC (rev 18705)
+++ core/trunk/testsuite/src/test/java/org/hibernate/test/hql/ASTParserLoadingTest.java 2010-02-05 21:51:24 UTC (rev 18706)
@@ -83,6 +83,7 @@
"hql/SimpleEntityWithAssociation.hbm.xml",
"hql/CrazyIdFieldNames.hbm.xml",
"hql/Image.hbm.xml",
+ "hql/ComponentContainer.hbm.xml",
"batchfetch/ProductLine.hbm.xml",
"cid/Customer.hbm.xml",
"cid/Order.hbm.xml",
@@ -105,6 +106,43 @@
return new FunctionalTestClassTestSuite( ASTParserLoadingTest.class );
}
+ public void testComponentJoins() {
+ Session s = openSession();
+ s.beginTransaction();
+ ComponentContainer root = new ComponentContainer(
+ new ComponentContainer.Address(
+ "123 Main",
+ "Anywhere",
+ "USA",
+ new ComponentContainer.Address.Zip( 12345, 6789 )
+ )
+ );
+ s.save( root );
+ s.getTransaction().commit();
+ s.close();
+
+ s = openSession();
+ s.beginTransaction();
+ List result = s.createQuery( "select a from ComponentContainer c join c.address a" ).list();
+ assertEquals( 1, result.size() );
+ assertTrue( ComponentContainer.Address.class.isInstance( result.get( 0 ) ) );
+
+ result = s.createQuery( "select a.zip from ComponentContainer c join c.address a" ).list();
+ assertEquals( 1, result.size() );
+ assertTrue( ComponentContainer.Address.Zip.class.isInstance( result.get( 0 ) ) );
+
+ result = s.createQuery( "select z from ComponentContainer c join c.address a join a.zip z" ).list();
+ assertEquals( 1, result.size() );
+ assertTrue( ComponentContainer.Address.Zip.class.isInstance( result.get( 0 ) ) );
+
+ result = s.createQuery( "select z.code from ComponentContainer c join c.address a join a.zip z" ).list();
+ assertEquals( 1, result.size() );
+ assertTrue( Integer.class.isInstance( result.get( 0 ) ) );
+ s.delete( root );
+ s.getTransaction().commit();
+ s.close();
+ }
+
public void testJPAQLQualifiedIdentificationVariables() {
Session s = openSession();
s.beginTransaction();
Modified: core/trunk/testsuite/src/test/java/org/hibernate/test/hql/ComponentContainer.java
===================================================================
--- core/trunk/testsuite/src/test/java/org/hibernate/test/hql/ComponentContainer.java 2010-02-05 20:33:14 UTC (rev 18705)
+++ core/trunk/testsuite/src/test/java/org/hibernate/test/hql/ComponentContainer.java 2010-02-05 21:51:24 UTC (rev 18706)
@@ -10,6 +10,13 @@
private Long id;
private ComponentContainer.Address address;
+ public ComponentContainer() {
+ }
+
+ public ComponentContainer(Address address) {
+ this.address = address;
+ }
+
public Long getId() {
return id;
}
14 years, 3 months
Hibernate SVN: r18705 - core/trunk/core/src/main/java/org/hibernate/cfg.
by hibernate-commits@lists.jboss.org
Author: steve.ebersole(a)jboss.com
Date: 2010-02-05 15:33:14 -0500 (Fri, 05 Feb 2010)
New Revision: 18705
Modified:
core/trunk/core/src/main/java/org/hibernate/cfg/SettingsFactory.java
Log:
HHH-4877 - "Check Nullability" logging incorrectness in SettingsFactory
Modified: core/trunk/core/src/main/java/org/hibernate/cfg/SettingsFactory.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/cfg/SettingsFactory.java 2010-02-05 18:28:39 UTC (rev 18704)
+++ core/trunk/core/src/main/java/org/hibernate/cfg/SettingsFactory.java 2010-02-05 20:33:14 UTC (rev 18705)
@@ -337,7 +337,7 @@
settings.setNamedQueryStartupCheckingEnabled( namedQueryChecking );
boolean checkNullability = PropertiesHelper.getBoolean(Environment.CHECK_NULLABILITY, properties, true);
- log.info( "Check Nullability in Core (should be disabled when Bean Validation is on): " + enabledDisabled(useStatistics) );
+ log.info( "Check Nullability in Core (should be disabled when Bean Validation is on): " + enabledDisabled(checkNullability) );
settings.setCheckNullability(checkNullability);
14 years, 3 months
Hibernate SVN: r18704 - in core/trunk/annotations/src: test/java/org/hibernate/test/annotations/id and 1 other directories.
by hibernate-commits@lists.jboss.org
Author: steve.ebersole(a)jboss.com
Date: 2010-02-05 13:28:39 -0500 (Fri, 05 Feb 2010)
New Revision: 18704
Added:
core/trunk/annotations/src/test/java/org/hibernate/test/annotations/id/NewSchemeIdTest.java
core/trunk/annotations/src/test/java/org/hibernate/test/annotations/id/sequences/NewSchemeIdTest.java
Modified:
core/trunk/annotations/src/main/java/org/hibernate/cfg/AnnotationBinder.java
core/trunk/annotations/src/test/java/org/hibernate/test/annotations/id/IdTest.java
core/trunk/annotations/src/test/java/org/hibernate/test/annotations/id/sequences/IdTest.java
Log:
HHH-4884 - Fix binding of @TableGenerator#initialValue into org.hibernate.id.enhanced.TableGenerator
Modified: core/trunk/annotations/src/main/java/org/hibernate/cfg/AnnotationBinder.java
===================================================================
--- core/trunk/annotations/src/main/java/org/hibernate/cfg/AnnotationBinder.java 2010-02-05 16:29:21 UTC (rev 18703)
+++ core/trunk/annotations/src/main/java/org/hibernate/cfg/AnnotationBinder.java 2010-02-05 18:28:39 UTC (rev 18704)
@@ -387,7 +387,8 @@
idGen.addParam( org.hibernate.id.enhanced.TableGenerator.VALUE_COLUMN_PARAM, tabGen.valueColumnName() );
}
idGen.addParam( org.hibernate.id.enhanced.TableGenerator.INCREMENT_PARAM, String.valueOf( tabGen.allocationSize() ) );
- idGen.addParam( org.hibernate.id.enhanced.TableGenerator.INITIAL_PARAM, String.valueOf( tabGen.initialValue() ) );
+ // See comment on HHH-4884 wrt initialValue. Basically initialValue is really the stated value + 1
+ idGen.addParam( org.hibernate.id.enhanced.TableGenerator.INITIAL_PARAM, String.valueOf( tabGen.initialValue() + 1 ) );
if ( tabGen.uniqueConstraints() != null && tabGen.uniqueConstraints().length > 0 ) {
log.warn( "Ignoring unique constraints specified on table generator [{}]", tabGen.name() );
}
Modified: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/id/IdTest.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/id/IdTest.java 2010-02-05 16:29:21 UTC (rev 18703)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/id/IdTest.java 2010-02-05 18:28:39 UTC (rev 18704)
@@ -3,6 +3,8 @@
import org.hibernate.Session;
import org.hibernate.Transaction;
+import org.hibernate.cfg.AnnotationConfiguration;
+import org.hibernate.cfg.Configuration;
import org.hibernate.mapping.Column;
import org.hibernate.test.annotations.TestCase;
import org.hibernate.test.annotations.id.entities.Ball;
@@ -298,4 +300,8 @@
return new String[] { "org/hibernate/test/annotations/orm.xml" };
}
+ @Override
+ protected void configure(Configuration cfg) {
+ cfg.setProperty( AnnotationConfiguration.USE_NEW_ID_GENERATOR_MAPPINGS, "true" );
+ }
}
Added: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/id/NewSchemeIdTest.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/id/NewSchemeIdTest.java (rev 0)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/id/NewSchemeIdTest.java 2010-02-05 18:28:39 UTC (rev 18704)
@@ -0,0 +1,39 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * Copyright (c) 2010, Red Hat Inc. 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 Inc.
+ *
+ * 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.annotations.id;
+
+import org.hibernate.cfg.AnnotationConfiguration;
+import org.hibernate.cfg.Configuration;
+
+/**
+ * TODO : javadoc
+ *
+ * @author Steve Ebersole
+ */
+public class NewSchemeIdTest extends IdTest {
+ @Override
+ protected void configure(Configuration cfg) {
+ cfg.setProperty( AnnotationConfiguration.USE_NEW_ID_GENERATOR_MAPPINGS, "true" );
+ }
+}
Modified: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/id/sequences/IdTest.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/id/sequences/IdTest.java 2010-02-05 16:29:21 UTC (rev 18703)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/id/sequences/IdTest.java 2010-02-05 18:28:39 UTC (rev 18704)
@@ -3,6 +3,8 @@
import org.hibernate.Session;
import org.hibernate.Transaction;
+import org.hibernate.cfg.AnnotationConfiguration;
+import org.hibernate.cfg.Configuration;
import org.hibernate.mapping.Column;
import org.hibernate.test.annotations.TestCase;
import org.hibernate.test.annotations.id.sequences.entities.Ball;
@@ -305,4 +307,9 @@
return new String[] { "org/hibernate/test/annotations/orm.xml" };
}
+ @Override
+ protected void configure(Configuration cfg) {
+ cfg.setProperty( AnnotationConfiguration.USE_NEW_ID_GENERATOR_MAPPINGS, "true" );
+ }
+
}
Added: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/id/sequences/NewSchemeIdTest.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/id/sequences/NewSchemeIdTest.java (rev 0)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/id/sequences/NewSchemeIdTest.java 2010-02-05 18:28:39 UTC (rev 18704)
@@ -0,0 +1,39 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * Copyright (c) 2010, Red Hat Inc. 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 Inc.
+ *
+ * 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.annotations.id.sequences;
+
+import org.hibernate.cfg.AnnotationConfiguration;
+import org.hibernate.cfg.Configuration;
+
+/**
+ * TODO : javadoc
+ *
+ * @author Steve Ebersole
+ */
+public class NewSchemeIdTest extends IdTest {
+ @Override
+ protected void configure(Configuration cfg) {
+ cfg.setProperty( AnnotationConfiguration.USE_NEW_ID_GENERATOR_MAPPINGS, "true" );
+ }
+}
\ No newline at end of file
14 years, 3 months
Hibernate SVN: r18703 - core/trunk/parent.
by hibernate-commits@lists.jboss.org
Author: epbernard
Date: 2010-02-05 11:29:21 -0500 (Fri, 05 Feb 2010)
New Revision: 18703
Modified:
core/trunk/parent/pom.xml
Log:
Revert improper JPA 2 versions bump
Modified: core/trunk/parent/pom.xml
===================================================================
--- core/trunk/parent/pom.xml 2010-02-05 14:37:34 UTC (rev 18702)
+++ core/trunk/parent/pom.xml 2010-02-05 16:29:21 UTC (rev 18703)
@@ -500,7 +500,7 @@
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.0-api</artifactId>
- <version>1.0.0-SNAPSHOT</version>
+ <version>1.0.0-CR-1</version>
</dependency>
<!-- Set the version of the hibernate-commons-annotations to be used throughout the the project -->
<dependency>
14 years, 3 months
Hibernate SVN: r18702 - in core/trunk: annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e2 and 8 other directories.
by hibernate-commits@lists.jboss.org
Author: epbernard
Date: 2010-02-05 09:37:34 -0500 (Fri, 05 Feb 2010)
New Revision: 18702
Added:
core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e2/a/
core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e2/a/Dependent.java
core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e2/a/DependentId.java
core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e2/a/DerivedIdentityIdClassParentIdClassDepTest.java
core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e2/a/Employee.java
core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e2/a/EmployeeId.java
core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/a/
core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/a/Dependent.java
core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/a/DependentId.java
core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/a/DerivedIdentityEmbeddedIdParentIdClassTest.java
core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/a/Employee.java
core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/a/EmployeeId.java
core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e5/b/DerivedIdentityIdClassParentSameIdTypeEmbeddedIdDepTest.java
core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e6/b/DerivedIdentityEmbeddedIdParentSameIdTypeEmbeddedIdDepTest.java
Removed:
core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e5/b/DerivedIdentityIdClassParentSameIdTypeDepTest.java
core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e6/b/DerivedIdentityEmbeddedIdParentSameIdTypeDepTest.java
Modified:
core/trunk/annotations/src/main/java/org/hibernate/cfg/AnnotationBinder.java
core/trunk/annotations/src/main/java/org/hibernate/cfg/ColumnsBuilder.java
core/trunk/annotations/src/main/java/org/hibernate/cfg/InheritanceState.java
core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e2/b/DerivedIdentityIdClassParentEmbeddedIdDepTest.java
core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e2/b/EmployeeId.java
core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/b/DerivedIdentityEmbeddedIdParentEmbeddedIdDepTest.java
core/trunk/parent/pom.xml
Log:
HHH-4848 Add more of the spec test for derived identity and @IdClass. Missing example 5.a and example 6.a (bug at the moment)
Modified: core/trunk/annotations/src/main/java/org/hibernate/cfg/AnnotationBinder.java
===================================================================
--- core/trunk/annotations/src/main/java/org/hibernate/cfg/AnnotationBinder.java 2010-02-05 12:35:18 UTC (rev 18701)
+++ core/trunk/annotations/src/main/java/org/hibernate/cfg/AnnotationBinder.java 2010-02-05 14:37:34 UTC (rev 18702)
@@ -1712,19 +1712,31 @@
//Either a regular property or a basic @Id or @EmbeddedId while not ignoring id annotations
else if ( !isId || !entityBinder.isIgnoreIdAnnotations() ) {
//define whether the type is a component or not
- boolean isComponent;
- isComponent = property.isAnnotationPresent( Embedded.class )
- || property.isAnnotationPresent( EmbeddedId.class )
- || returnedClass.isAnnotationPresent( Embeddable.class );
- //FIXME do the overrideColumnFromMapsIdProperty here and force the idclass type to look like an @embedded
+ boolean isComponent = false;
+
//Overrides from @MapsId if needed
boolean isOverridden = false;
if ( isId || propertyHolder.isOrWithinEmbeddedId() || propertyHolder.isInIdClass() ) {
- Ejb3Column[] oldColumns = columns;
- columns = columnsBuilder.overrideColumnFromMapperOrMapsIdProperty(isId);
- isOverridden = oldColumns != columns;
+ //the associated entity could be using an @IdClass making the overridden property a component
+ final PropertyData overridingProperty = BinderHelper.getPropertyOverriddenByMapperOrMapsId( isId, propertyHolder, property.getName(), mappings );
+ if (overridingProperty != null) {
+ isOverridden = true;
+ final InheritanceState state = inheritanceStatePerClass.get( overridingProperty.getClassOrElement() );
+ if (state != null) {
+ isComponent = isComponent || state.hasIdClassOrEmbeddedId();
+ }
+ //Get the new column
+ columns = columnsBuilder.overrideColumnFromMapperOrMapsIdProperty(isId);
+ }
}
+
+ isComponent = isComponent
+ || property.isAnnotationPresent( Embedded.class )
+ || property.isAnnotationPresent( EmbeddedId.class )
+ || returnedClass.isAnnotationPresent( Embeddable.class );
+
+
if ( isComponent ) {
String referencedEntityName = null;
if (isOverridden) {
@@ -2085,19 +2097,22 @@
for ( int i = 0; i < classElements.size(); i++ ) {
final PropertyData idClassPropertyData = classElements.get( i );
final PropertyData entityPropertyData = orderedBaseClassElements.get( idClassPropertyData.getPropertyName() );
- if ( propertyHolder.isInIdClass() ) {
- if ( entityPropertyData.getProperty().isAnnotationPresent( ManyToOne.class )
- || entityPropertyData.getProperty().isAnnotationPresent( OneToOne.class ) ) {
- //don't replace here as we need to use the actual original return type
- //the annotation overriding will be dealt with by a mechanism similar to @MapsId
+ //FIXME
+ if ( entityPropertyData != null ) {
+ if ( propertyHolder.isInIdClass() ) {
+ if ( entityPropertyData.getProperty().isAnnotationPresent( ManyToOne.class )
+ || entityPropertyData.getProperty().isAnnotationPresent( OneToOne.class ) ) {
+ //don't replace here as we need to use the actual original return type
+ //the annotation overriding will be dealt with by a mechanism similar to @MapsId
+ }
+ else {
+ classElements.set( i, entityPropertyData ); //this works since they are in the same order
+ }
}
else {
classElements.set( i, entityPropertyData ); //this works since they are in the same order
}
}
- else {
- classElements.set( i, entityPropertyData ); //this works since they are in the same order
- }
}
}
}
Modified: core/trunk/annotations/src/main/java/org/hibernate/cfg/ColumnsBuilder.java
===================================================================
--- core/trunk/annotations/src/main/java/org/hibernate/cfg/ColumnsBuilder.java 2010-02-05 12:35:18 UTC (rev 18701)
+++ core/trunk/annotations/src/main/java/org/hibernate/cfg/ColumnsBuilder.java 2010-02-05 14:37:34 UTC (rev 18702)
@@ -183,11 +183,11 @@
Ejb3Column[] overrideColumnFromMapperOrMapsIdProperty(boolean isId) {
Ejb3Column[] result = columns;
- final PropertyData annotatedWithMapsId = BinderHelper.getPropertyOverriddenByMapperOrMapsId( isId, propertyHolder, property.getName(), mappings );
- if ( annotatedWithMapsId != null ) {
- result = buildExplicitJoinColumns( annotatedWithMapsId.getProperty(), annotatedWithMapsId );
+ final PropertyData overridingProperty = BinderHelper.getPropertyOverriddenByMapperOrMapsId( isId, propertyHolder, property.getName(), mappings );
+ if ( overridingProperty != null ) {
+ result = buildExplicitJoinColumns( overridingProperty.getProperty(), overridingProperty );
if (result == null) {
- result = buildDefaultJoinColumnsForXToOne( annotatedWithMapsId.getProperty(), annotatedWithMapsId);
+ result = buildDefaultJoinColumnsForXToOne( overridingProperty.getProperty(), overridingProperty);
}
}
return result;
Modified: core/trunk/annotations/src/main/java/org/hibernate/cfg/InheritanceState.java
===================================================================
--- core/trunk/annotations/src/main/java/org/hibernate/cfg/InheritanceState.java 2010-02-05 12:35:18 UTC (rev 18701)
+++ core/trunk/annotations/src/main/java/org/hibernate/cfg/InheritanceState.java 2010-02-05 14:37:34 UTC (rev 18702)
@@ -67,6 +67,7 @@
private ExtendedMappings mappings;
private AccessType accessType;
private ElementsToProcess elementsToProcess;
+ private Boolean hasIdClassOrEmbeddedId;
public InheritanceState(XClass clazz,
Map<XClass, InheritanceState> inheritanceStatePerClass,
@@ -167,21 +168,6 @@
isEmbeddableSuperclass = embeddableSuperclass;
}
- public XClass getIdentifierTypeIfComponent() {
- final ReflectionManager reflectionManager = mappings.getReflectionManager();
- if ( reflectionManager.equals( identifierType, void.class ) ) {
- IdClass idClass = clazz.getAnnotation( IdClass.class );
- if (idClass != null) {
- identifierType = reflectionManager.toXClass( idClass.value() );
- }
- else {
- //find @EmbeddedId
- getElementsToProcess();
- }
- }
- return identifierType;
- }
-
void postProcess(PersistentClass persistenceClass, EntityBinder entityBinder) {
//make sure we run elements to process
getElementsToProcess();
@@ -204,14 +190,32 @@
else {
return null;
}
+ }
+ }
+ public Boolean hasIdClassOrEmbeddedId() {
+ if (hasIdClassOrEmbeddedId == null) {
+ hasIdClassOrEmbeddedId = false;
+ if ( getClassWithIdClass( true ) != null ) {
+ hasIdClassOrEmbeddedId = true;
+ }
+ else {
+ final ElementsToProcess process = getElementsToProcess();
+ for(PropertyData property : process.getElements() ) {
+ if ( property.getProperty().isAnnotationPresent( EmbeddedId.class ) ) {
+ hasIdClassOrEmbeddedId = true;
+ break;
+ }
+ }
+ }
}
+ return hasIdClassOrEmbeddedId;
}
/*
- * Get the annotated elements, guessing the access type from @Id or @EmbeddedId presence.
- * Change EntityBinder by side effect
- */
+ * Get the annotated elements, guessing the access type from @Id or @EmbeddedId presence.
+ * Change EntityBinder by side effect
+ */
public ElementsToProcess getElementsToProcess() {
if (elementsToProcess == null) {
InheritanceState inheritanceState = inheritanceStatePerClass.get( clazz );
Added: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e2/a/Dependent.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e2/a/Dependent.java (rev 0)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e2/a/Dependent.java 2010-02-05 14:37:34 UTC (rev 18702)
@@ -0,0 +1,25 @@
+package org.hibernate.test.annotations.derivedidentities.e2.a;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.IdClass;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinColumns;
+import javax.persistence.ManyToOne;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+(a)IdClass(DependentId.class)
+public class Dependent {
+ @Id
+ String name;
+
+ @Id @ManyToOne
+ @JoinColumns({
+ @JoinColumn(name="FK1", referencedColumnName="firstName"),
+ @JoinColumn(name="FK2", referencedColumnName="lastName")
+ })
+ Employee emp;
+}
Added: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e2/a/DependentId.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e2/a/DependentId.java (rev 0)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e2/a/DependentId.java 2010-02-05 14:37:34 UTC (rev 18702)
@@ -0,0 +1,14 @@
+package org.hibernate.test.annotations.derivedidentities.e2.a;
+
+import java.io.Serializable;
+import javax.persistence.Embeddable;
+import javax.persistence.Embedded;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class DependentId implements Serializable {
+ String name; // matches name of @Id attribute
+ @Embedded
+ EmployeeId emp; //matches name of attribute and type of Employee PK
+}
Added: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e2/a/DerivedIdentityIdClassParentIdClassDepTest.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e2/a/DerivedIdentityIdClassParentIdClassDepTest.java (rev 0)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e2/a/DerivedIdentityIdClassParentIdClassDepTest.java 2010-02-05 14:37:34 UTC (rev 18702)
@@ -0,0 +1,52 @@
+package org.hibernate.test.annotations.derivedidentities.e2.a;
+
+import org.hibernate.Session;
+import org.hibernate.test.annotations.TestCase;
+import org.hibernate.test.util.SchemaUtil;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class DerivedIdentityIdClassParentIdClassDepTest extends TestCase {
+
+ public void testManytoOne() {
+ assertTrue( SchemaUtil.isColumnPresent( "Dependent", "FK1", getCfg() ) );
+ assertTrue( SchemaUtil.isColumnPresent( "Dependent", "FK2", getCfg() ) );
+ assertTrue( SchemaUtil.isColumnPresent( "Dependent", "name", getCfg() ) );
+ assertTrue( ! SchemaUtil.isColumnPresent( "Dependent", "firstName", getCfg() ) );
+ assertTrue( ! SchemaUtil.isColumnPresent( "Dependent", "lastName", getCfg() ) );
+ Employee e = new Employee();
+ e.firstName = "Emmanuel";
+ e.lastName = "Bernard";
+ Session s = openSession( );
+ s.getTransaction().begin();
+ s.persist( e );
+ Dependent d = new Dependent();
+ d.emp = e;
+ d.name = "Doggy";
+ s.persist( d );
+ s.flush();
+ s.clear();
+ DependentId dId = new DependentId();
+ EmployeeId eId = new EmployeeId();
+ dId.name = d.name;
+ dId.emp = eId;
+ eId.firstName = e.firstName;
+ eId.lastName = e.lastName;
+ d = (Dependent) s.get( Dependent.class, dId );
+ assertNotNull( d.emp );
+ assertEquals( e.firstName, d.emp.firstName );
+ s.delete( d );
+ s.delete( d.emp );
+ s.getTransaction().commit();
+ s.close();
+ }
+
+ @Override
+ protected Class<?>[] getAnnotatedClasses() {
+ return new Class<?>[] {
+ Employee.class,
+ Dependent.class
+ };
+ }
+}
Added: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e2/a/Employee.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e2/a/Employee.java (rev 0)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e2/a/Employee.java 2010-02-05 14:37:34 UTC (rev 18702)
@@ -0,0 +1,15 @@
+package org.hibernate.test.annotations.derivedidentities.e2.a;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.IdClass;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+(a)IdClass(EmployeeId.class)
+public class Employee {
+ @Id String firstName;
+ @Id String lastName;
+}
\ No newline at end of file
Added: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e2/a/EmployeeId.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e2/a/EmployeeId.java (rev 0)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e2/a/EmployeeId.java 2010-02-05 14:37:34 UTC (rev 18702)
@@ -0,0 +1,11 @@
+package org.hibernate.test.annotations.derivedidentities.e2.a;
+
+import java.io.Serializable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class EmployeeId implements Serializable {
+ String firstName;
+ String lastName;
+}
Modified: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e2/b/DerivedIdentityIdClassParentEmbeddedIdDepTest.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e2/b/DerivedIdentityIdClassParentEmbeddedIdDepTest.java 2010-02-05 12:35:18 UTC (rev 18701)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e2/b/DerivedIdentityIdClassParentEmbeddedIdDepTest.java 2010-02-05 14:37:34 UTC (rev 18702)
@@ -25,9 +25,6 @@
d.emp = e;
d.id = new DependentId();
d.id.name = "Doggy";
-// d.id.empPK = new EmployeeId(); //FIXME not needed when foreign is enabled
-// d.id.empPK.firstName = e.firstName; //FIXME not needed when foreign is enabled
-// d.id.empPK.lastName = e.lastName; //FIXME not needed when foreign is enabled
s.persist( d );
s.flush();
s.clear();
Modified: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e2/b/EmployeeId.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e2/b/EmployeeId.java 2010-02-05 12:35:18 UTC (rev 18701)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e2/b/EmployeeId.java 2010-02-05 14:37:34 UTC (rev 18702)
@@ -6,7 +6,6 @@
/**
* @author Emmanuel Bernard
*/
-@Embeddable
public class EmployeeId implements Serializable {
String firstName;
String lastName;
Added: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/a/Dependent.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/a/Dependent.java (rev 0)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/a/Dependent.java 2010-02-05 14:37:34 UTC (rev 18702)
@@ -0,0 +1,28 @@
+package org.hibernate.test.annotations.derivedidentities.e3.a;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.IdClass;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinColumns;
+import javax.persistence.ManyToOne;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+(a)IdClass(DependentId.class)
+public class Dependent {
+ @Id
+ @Column(name = "dep_name")
+ String name; // default column name is overridden
+
+ @Id
+ @JoinColumns({
+ @JoinColumn(name = "FK1", referencedColumnName = "firstName"),
+ @JoinColumn(name = "FK2", referencedColumnName = "lastName")
+ })
+ @ManyToOne
+ Employee emp;
+}
Added: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/a/DependentId.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/a/DependentId.java (rev 0)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/a/DependentId.java 2010-02-05 14:37:34 UTC (rev 18702)
@@ -0,0 +1,11 @@
+package org.hibernate.test.annotations.derivedidentities.e3.a;
+
+import java.io.Serializable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class DependentId implements Serializable {
+ String name; // matches name of @Id attribute
+ EmployeeId emp; // matches name of @Id attribute and type of embedded id of Employee
+}
Added: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/a/DerivedIdentityEmbeddedIdParentIdClassTest.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/a/DerivedIdentityEmbeddedIdParentIdClassTest.java (rev 0)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/a/DerivedIdentityEmbeddedIdParentIdClassTest.java 2010-02-05 14:37:34 UTC (rev 18702)
@@ -0,0 +1,52 @@
+package org.hibernate.test.annotations.derivedidentities.e3.a;
+
+import org.hibernate.Session;
+import org.hibernate.test.annotations.TestCase;
+import org.hibernate.test.util.SchemaUtil;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class DerivedIdentityEmbeddedIdParentIdClassTest extends TestCase {
+ public void testManyToOne() throws Exception {
+ assertTrue( SchemaUtil.isColumnPresent( "Dependent", "FK1", getCfg() ) );
+ assertTrue( SchemaUtil.isColumnPresent( "Dependent", "FK2", getCfg() ) );
+ assertTrue( SchemaUtil.isColumnPresent( "Dependent", "dep_name", getCfg() ) );
+ assertTrue( ! SchemaUtil.isColumnPresent( "Dependent", "firstName", getCfg() ) );
+ assertTrue( ! SchemaUtil.isColumnPresent( "Dependent", "lastName", getCfg() ) );
+ Employee e = new Employee();
+ e.empId = new EmployeeId();
+ e.empId.firstName = "Emmanuel";
+ e.empId.lastName = "Bernard";
+ Session s = openSession( );
+ s.getTransaction().begin();
+ s.persist( e );
+ Dependent d = new Dependent();
+ d.emp = e;
+ d.name = "Doggy";
+ DependentId dId = new DependentId();
+ dId.emp = new EmployeeId();
+ dId.emp.firstName = e.empId.firstName;
+ dId.emp.lastName = e.empId.lastName;
+ dId.name = d.name;
+ s.persist( d );
+ s.flush();
+ s.clear();
+ d = (Dependent) s.get( Dependent.class, dId );
+ assertNotNull( d.emp );
+ assertEquals( e.empId.firstName, d.emp.empId.firstName );
+ s.delete( d );
+ s.delete( d.emp );
+ s.getTransaction().commit();
+ s.close();
+ }
+
+
+ @Override
+ protected Class<?>[] getAnnotatedClasses() {
+ return new Class<?>[] {
+ Dependent.class,
+ Employee.class
+ };
+ }
+}
Added: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/a/Employee.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/a/Employee.java (rev 0)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/a/Employee.java 2010-02-05 14:37:34 UTC (rev 18702)
@@ -0,0 +1,13 @@
+package org.hibernate.test.annotations.derivedidentities.e3.a;
+
+import javax.persistence.EmbeddedId;
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Employee {
+ @EmbeddedId
+ EmployeeId empId;
+}
Added: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/a/EmployeeId.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/a/EmployeeId.java (rev 0)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/a/EmployeeId.java 2010-02-05 14:37:34 UTC (rev 18702)
@@ -0,0 +1,11 @@
+package org.hibernate.test.annotations.derivedidentities.e3.a;
+
+import java.io.Serializable;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class EmployeeId implements Serializable{
+ String firstName;
+ String lastName;
+}
Modified: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/b/DerivedIdentityEmbeddedIdParentEmbeddedIdDepTest.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/b/DerivedIdentityEmbeddedIdParentEmbeddedIdDepTest.java 2010-02-05 12:35:18 UTC (rev 18701)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/b/DerivedIdentityEmbeddedIdParentEmbeddedIdDepTest.java 2010-02-05 14:37:34 UTC (rev 18702)
@@ -25,9 +25,6 @@
d.emp = e;
d.id = new DependentId();
d.id.name = "Doggy";
-// d.id.empPK = new EmployeeId();
-// d.id.empPK.firstName = e.empId.firstName; //FIXME not needed when foreign is enabled
-// d.id.empPK.lastName = e.empId.lastName; //FIXME not needed when foreign is enabled
s.persist( d );
s.flush();
s.clear();
Deleted: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e5/b/DerivedIdentityIdClassParentSameIdTypeDepTest.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e5/b/DerivedIdentityIdClassParentSameIdTypeDepTest.java 2010-02-05 12:35:18 UTC (rev 18701)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e5/b/DerivedIdentityIdClassParentSameIdTypeDepTest.java 2010-02-05 14:37:34 UTC (rev 18702)
@@ -1,45 +0,0 @@
-package org.hibernate.test.annotations.derivedidentities.e5.b;
-
-import java.util.Date;
-
-import org.hibernate.Session;
-import org.hibernate.test.annotations.TestCase;
-import org.hibernate.test.util.SchemaUtil;
-
-/**
- * @author Emmanuel Bernard
- */
-public class DerivedIdentityIdClassParentSameIdTypeDepTest extends TestCase {
-
- public void testOneToOneExplicitJoinColumn() throws Exception {
- assertTrue( SchemaUtil.isColumnPresent( "MedicalHistory", "FK1", getCfg() ) );
- assertTrue( SchemaUtil.isColumnPresent( "MedicalHistory", "FK2", getCfg() ) );
- assertTrue( ! SchemaUtil.isColumnPresent( "MedicalHistory", "firstname", getCfg() ) );
- Person e = new Person();
- e.firstName = "Emmanuel";
- e.lastName = "Bernard";
- Session s = openSession( );
- s.getTransaction().begin();
- s.persist( e );
- MedicalHistory d = new MedicalHistory();
-// d.id = new PersonId(); //FIXME not needed when foreign is enabled
-// d.id.firstName = "Emmanuel"; //FIXME not needed when foreign is enabled
-// d.id.lastName = "Bernard"; //FIXME not needed when foreign is enabled
- d.patient = e;
- s.persist( d );
- s.flush();
- s.clear();
- d = (MedicalHistory) s.get( MedicalHistory.class, d.id );
- assertEquals( d.id.firstName, d.patient.firstName );
- s.getTransaction().rollback();
- s.close();
- }
-
- @Override
- protected Class<?>[] getAnnotatedClasses() {
- return new Class<?>[] {
- MedicalHistory.class,
- Person.class
- };
- }
-}
Copied: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e5/b/DerivedIdentityIdClassParentSameIdTypeEmbeddedIdDepTest.java (from rev 18700, core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e5/b/DerivedIdentityIdClassParentSameIdTypeDepTest.java)
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e5/b/DerivedIdentityIdClassParentSameIdTypeEmbeddedIdDepTest.java (rev 0)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e5/b/DerivedIdentityIdClassParentSameIdTypeEmbeddedIdDepTest.java 2010-02-05 14:37:34 UTC (rev 18702)
@@ -0,0 +1,43 @@
+package org.hibernate.test.annotations.derivedidentities.e5.b;
+
+import java.util.Date;
+
+import org.hibernate.Session;
+import org.hibernate.junit.FailureExpected;
+import org.hibernate.test.annotations.TestCase;
+import org.hibernate.test.util.SchemaUtil;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class DerivedIdentityIdClassParentSameIdTypeEmbeddedIdDepTest extends TestCase {
+
+ public void testOneToOneExplicitJoinColumn() throws Exception {
+ assertTrue( SchemaUtil.isColumnPresent( "MedicalHistory", "FK1", getCfg() ) );
+ assertTrue( SchemaUtil.isColumnPresent( "MedicalHistory", "FK2", getCfg() ) );
+ assertTrue( ! SchemaUtil.isColumnPresent( "MedicalHistory", "firstname", getCfg() ) );
+ Person e = new Person();
+ e.firstName = "Emmanuel";
+ e.lastName = "Bernard";
+ Session s = openSession( );
+ s.getTransaction().begin();
+ s.persist( e );
+ MedicalHistory d = new MedicalHistory();
+ d.patient = e;
+ s.persist( d );
+ s.flush();
+ s.clear();
+ d = (MedicalHistory) s.get( MedicalHistory.class, d.id );
+ assertEquals( d.id.firstName, d.patient.firstName );
+ s.getTransaction().rollback();
+ s.close();
+ }
+
+ @Override
+ protected Class<?>[] getAnnotatedClasses() {
+ return new Class<?>[] {
+ MedicalHistory.class,
+ Person.class
+ };
+ }
+}
Deleted: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e6/b/DerivedIdentityEmbeddedIdParentSameIdTypeDepTest.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e6/b/DerivedIdentityEmbeddedIdParentSameIdTypeDepTest.java 2010-02-05 12:35:18 UTC (rev 18701)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e6/b/DerivedIdentityEmbeddedIdParentSameIdTypeDepTest.java 2010-02-05 14:37:34 UTC (rev 18702)
@@ -1,44 +0,0 @@
-package org.hibernate.test.annotations.derivedidentities.e6.b;
-
-import org.hibernate.Session;
-import org.hibernate.test.annotations.TestCase;
-import org.hibernate.test.util.SchemaUtil;
-
-/**
- * @author Emmanuel Bernard
- */
-public class DerivedIdentityEmbeddedIdParentSameIdTypeDepTest extends TestCase {
-
- public void testOneToOneExplicitJoinColumn() throws Exception {
- assertTrue( SchemaUtil.isColumnPresent( "MedicalHistory", "FK1", getCfg() ) );
- assertTrue( SchemaUtil.isColumnPresent( "MedicalHistory", "FK2", getCfg() ) );
- assertTrue( ! SchemaUtil.isColumnPresent( "MedicalHistory", "firstname", getCfg() ) );
- Person e = new Person();
- e.id = new PersonId();
- e.id.firstName = "Emmanuel";
- e.id.lastName = "Bernard";
- Session s = openSession( );
- s.getTransaction().begin();
- s.persist( e );
- MedicalHistory d = new MedicalHistory();
-// d.id = new PersonId();
-// d.id.firstName = "Emmanuel"; //FIXME not needed when foreign is enabled
-// d.id.lastName = "Bernard"; //FIXME not needed when foreign is enabled
- d.patient = e;
- s.persist( d );
- s.flush();
- s.clear();
- d = (MedicalHistory) s.get( MedicalHistory.class, d.id );
- assertEquals( d.id.firstName, d.patient.id.firstName );
- s.getTransaction().rollback();
- s.close();
- }
-
- @Override
- protected Class<?>[] getAnnotatedClasses() {
- return new Class<?>[] {
- MedicalHistory.class,
- Person.class
- };
- }
-}
\ No newline at end of file
Copied: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e6/b/DerivedIdentityEmbeddedIdParentSameIdTypeEmbeddedIdDepTest.java (from rev 18700, core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e6/b/DerivedIdentityEmbeddedIdParentSameIdTypeDepTest.java)
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e6/b/DerivedIdentityEmbeddedIdParentSameIdTypeEmbeddedIdDepTest.java (rev 0)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e6/b/DerivedIdentityEmbeddedIdParentSameIdTypeEmbeddedIdDepTest.java 2010-02-05 14:37:34 UTC (rev 18702)
@@ -0,0 +1,44 @@
+package org.hibernate.test.annotations.derivedidentities.e6.b;
+
+import org.hibernate.Session;
+import org.hibernate.test.annotations.TestCase;
+import org.hibernate.test.util.SchemaUtil;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class DerivedIdentityEmbeddedIdParentSameIdTypeEmbeddedIdDepTest extends TestCase {
+
+ public void testOneToOneExplicitJoinColumn() throws Exception {
+ assertTrue( SchemaUtil.isColumnPresent( "MedicalHistory", "FK1", getCfg() ) );
+ assertTrue( SchemaUtil.isColumnPresent( "MedicalHistory", "FK2", getCfg() ) );
+ assertTrue( ! SchemaUtil.isColumnPresent( "MedicalHistory", "firstname", getCfg() ) );
+ Person e = new Person();
+ e.id = new PersonId();
+ e.id.firstName = "Emmanuel";
+ e.id.lastName = "Bernard";
+ Session s = openSession( );
+ s.getTransaction().begin();
+ s.persist( e );
+ MedicalHistory d = new MedicalHistory();
+// d.id = new PersonId();
+// d.id.firstName = "Emmanuel"; //FIXME not needed when foreign is enabled
+// d.id.lastName = "Bernard"; //FIXME not needed when foreign is enabled
+ d.patient = e;
+ s.persist( d );
+ s.flush();
+ s.clear();
+ d = (MedicalHistory) s.get( MedicalHistory.class, d.id );
+ assertEquals( d.id.firstName, d.patient.id.firstName );
+ s.getTransaction().rollback();
+ s.close();
+ }
+
+ @Override
+ protected Class<?>[] getAnnotatedClasses() {
+ return new Class<?>[] {
+ MedicalHistory.class,
+ Person.class
+ };
+ }
+}
\ No newline at end of file
Modified: core/trunk/parent/pom.xml
===================================================================
--- core/trunk/parent/pom.xml 2010-02-05 12:35:18 UTC (rev 18701)
+++ core/trunk/parent/pom.xml 2010-02-05 14:37:34 UTC (rev 18702)
@@ -500,7 +500,7 @@
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.0-api</artifactId>
- <version>1.0.0-CR-1</version>
+ <version>1.0.0-SNAPSHOT</version>
</dependency>
<!-- Set the version of the hibernate-commons-annotations to be used throughout the the project -->
<dependency>
14 years, 3 months
Hibernate SVN: r18701 - core/trunk/core/src/main/java/org/hibernate/tuple/entity.
by hibernate-commits@lists.jboss.org
Author: epbernard
Date: 2010-02-05 07:35:18 -0500 (Fri, 05 Feb 2010)
New Revision: 18701
Modified:
core/trunk/core/src/main/java/org/hibernate/tuple/entity/AbstractEntityTuplizer.java
Log:
HHH-4848 simplify the non-jpa 2 case a bit further
Modified: core/trunk/core/src/main/java/org/hibernate/tuple/entity/AbstractEntityTuplizer.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/tuple/entity/AbstractEntityTuplizer.java 2010-02-05 06:25:59 UTC (rev 18700)
+++ core/trunk/core/src/main/java/org/hibernate/tuple/entity/AbstractEntityTuplizer.java 2010-02-05 12:35:18 UTC (rev 18701)
@@ -307,17 +307,6 @@
public Object getIdentifier(Object entity, EntityMode entityMode, SessionFactoryImplementor factory) {
Object id = mappedIdentifierType.instantiate( entityMode );
final Object[] propertyValues = virtualIdComponent.getPropertyValues( entity, entityMode );
- Type[] subTypes = virtualIdComponent.getSubtypes();
- Type[] copierSubTypes = mappedIdentifierType.getSubtypes();
- final int length = subTypes.length;
- for ( int i = 0 ; i < length; i++ ) {
- //JPA 2 in @IdClass points to the pk of the entity
- if ( subTypes[i].isAssociationType() && ! copierSubTypes[i].isAssociationType()) {
- final String associatedEntityName = ( ( EntityType ) subTypes[i] ).getAssociatedEntityName();
- final EntityPersister entityPersister = factory.getEntityPersister( associatedEntityName );
- propertyValues[i] = entityPersister.getIdentifier( propertyValues[i], entityMode );
- }
- }
mappedIdentifierType.setPropertyValues( id, propertyValues, entityMode );
return id;
}
14 years, 3 months
Hibernate SVN: r18700 - in core/trunk: testsuite/src/test/java/org/hibernate/test/readonly and 1 other directory.
by hibernate-commits@lists.jboss.org
Author: gbadner
Date: 2010-02-05 01:25:59 -0500 (Fri, 05 Feb 2010)
New Revision: 18700
Modified:
core/trunk/core/src/main/java/org/hibernate/event/def/DefaultRefreshEventListener.java
core/trunk/testsuite/src/test/java/org/hibernate/test/readonly/ReadOnlyProxyTest.java
Log:
HHH-4880 : EntityManager.refresh does not throw EntityNotFoundException for removed entity
Modified: core/trunk/core/src/main/java/org/hibernate/event/def/DefaultRefreshEventListener.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/event/def/DefaultRefreshEventListener.java 2010-02-05 04:00:04 UTC (rev 18699)
+++ core/trunk/core/src/main/java/org/hibernate/event/def/DefaultRefreshEventListener.java 2010-02-05 06:25:59 UTC (rev 18700)
@@ -151,7 +151,9 @@
Object result = persister.load( id, object, event.getLockOptions(), source );
// Keep the same read-only/modifiable setting for the entity that it had before refreshing;
// If it was transient, then set it to the default for the source.
- source.setReadOnly( result, ( e == null ? source.isDefaultReadOnly() : e.isReadOnly() ) );
+ if ( result != null ) {
+ source.setReadOnly( result, ( e == null ? source.isDefaultReadOnly() : e.isReadOnly() ) );
+ }
source.setFetchProfile(previousFetchProfile);
UnresolvableObjectException.throwIfNull( result, id, persister.getEntityName() );
Modified: core/trunk/testsuite/src/test/java/org/hibernate/test/readonly/ReadOnlyProxyTest.java
===================================================================
--- core/trunk/testsuite/src/test/java/org/hibernate/test/readonly/ReadOnlyProxyTest.java 2010-02-05 04:00:04 UTC (rev 18699)
+++ core/trunk/testsuite/src/test/java/org/hibernate/test/readonly/ReadOnlyProxyTest.java 2010-02-05 06:25:59 UTC (rev 18700)
@@ -38,6 +38,7 @@
import org.hibernate.Transaction;
import org.hibernate.TransientObjectException;
import org.hibernate.SessionException;
+import org.hibernate.UnresolvableObjectException;
import org.hibernate.engine.SessionImplementor;
import org.hibernate.proxy.HibernateProxy;
import org.hibernate.proxy.LazyInitializer;
@@ -882,7 +883,88 @@
s.delete( dp );
t.commit();
s.close();
+ }
+
+ public void testReadOnlyRefreshDeleted() {
+ Session s = openSession();
+ s.setCacheMode(CacheMode.IGNORE);
+ Transaction t = s.beginTransaction();
+ DataPoint dp = new DataPoint();
+ dp.setDescription( "original" );
+ dp.setX( new BigDecimal(0.1d).setScale(19, BigDecimal.ROUND_DOWN) );
+ dp.setY( new BigDecimal( Math.cos( dp.getX().doubleValue() ) ).setScale(19, BigDecimal.ROUND_DOWN) );
+ s.save(dp);
+ t.commit();
+ s.close();
+
+ s = openSession();
+ s.setCacheMode(CacheMode.IGNORE);
+ t = s.beginTransaction();
+ HibernateProxy dpProxy = ( HibernateProxy ) s.load( DataPoint.class, dp.getId() );
+ assertFalse( Hibernate.isInitialized( dpProxy ) );
+ t.commit();
+ s.close();
+
+ s = openSession();
+ s.setCacheMode(CacheMode.IGNORE);
+ t = s.beginTransaction();
+ dp = ( DataPoint ) s.get( DataPoint.class, dp.getId() );
+ s.delete( dp );
+ s.flush();
+ try {
+ s.refresh( dp );
+ fail( "should have thrown UnresolvableObjectException" );
+ }
+ catch ( UnresolvableObjectException ex ) {
+ // expected
+ }
+ finally {
+ t.rollback();
+ s.close();
+ }
+
+ s = openSession();
+ t = s.beginTransaction();
+ s.setCacheMode(CacheMode.IGNORE);
+ DataPoint dpProxyInit = ( DataPoint ) s.load( DataPoint.class, dp.getId() );
+ assertEquals( "original", dp.getDescription() );
+ s.delete( dpProxyInit );
+ t.commit();
+ s.close();
+
+ s = openSession();
+ t = s.beginTransaction();
+ assertTrue( dpProxyInit instanceof HibernateProxy );
+ assertTrue( Hibernate.isInitialized( dpProxyInit ) );
+ try {
+ s.refresh( dpProxyInit );
+ fail( "should have thrown UnresolvableObjectException" );
+ }
+ catch ( UnresolvableObjectException ex ) {
+ // expected
+ }
+ finally {
+ t.rollback();
+ s.close();
+ }
+
+ s = openSession();
+ t = s.beginTransaction();
+ assertTrue( dpProxy instanceof HibernateProxy );
+ try {
+ s.refresh( dpProxy );
+ assertFalse( Hibernate.isInitialized( dpProxy ) );
+ Hibernate.initialize( dpProxy );
+ fail( "should have thrown UnresolvableObjectException" );
+ }
+ catch ( UnresolvableObjectException ex ) {
+ // expected
+ }
+ finally {
+ t.rollback();
+ s.close();
+ }
}
public void testReadOnlyRefreshDetached() {
14 years, 3 months