Repository: tapestry-5 Updated Branches: refs/heads/master 90dfd222e -> 2869383aa
FIXED - TAP5-2525: Tapestry-Hibernate integration incompatible with Hibernate 5.x - apply a pull request by annorax <[email protected]> as a patch (https://patch-diff.githubusercontent.com/raw/apache/tapestry-5/pull/2.patch) - the patch makes it possible to use both Hibernate 4 & 5 with T5.4 - fix imports, compilation failures - apply formatting Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/2869383a Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/2869383a Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/2869383a Branch: refs/heads/master Commit: 2869383aa77f11fdf1ef800ddd1eef9ba30acaae Parents: 90dfd22 Author: kaosko <[email protected]> Authored: Mon Mar 14 14:53:17 2016 -0700 Committer: kaosko <[email protected]> Committed: Mon Mar 14 14:53:17 2016 -0700 ---------------------------------------------------------------------- .../hibernate/modules/HibernateModule.java | 37 +++++++++----------- .../hibernate/HibernateEntityValueEncoder.java | 7 ++-- .../HibernateEntityValueEncoderTest.java | 21 ++--------- 3 files changed, 21 insertions(+), 44 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/2869383a/tapestry-hibernate/src/main/java/org/apache/tapestry5/hibernate/modules/HibernateModule.java ---------------------------------------------------------------------- diff --git a/tapestry-hibernate/src/main/java/org/apache/tapestry5/hibernate/modules/HibernateModule.java b/tapestry-hibernate/src/main/java/org/apache/tapestry5/hibernate/modules/HibernateModule.java index 39b1f0a..dae31ca 100644 --- a/tapestry-hibernate/src/main/java/org/apache/tapestry5/hibernate/modules/HibernateModule.java +++ b/tapestry-hibernate/src/main/java/org/apache/tapestry5/hibernate/modules/HibernateModule.java @@ -42,9 +42,7 @@ import org.apache.tapestry5.services.dashboard.DashboardManager; import org.apache.tapestry5.services.dashboard.DashboardTab; import org.apache.tapestry5.services.transform.ComponentClassTransformWorker2; import org.hibernate.Session; -import org.hibernate.mapping.PersistentClass; - -import java.util.Iterator; +import org.hibernate.metadata.ClassMetadata; /** * Supplements the services defined by {@link org.apache.tapestry5.hibernate.modules.HibernateCoreModule} with additional @@ -83,20 +81,21 @@ public class HibernateModule * back then the entity can be coerced. */ @SuppressWarnings("unchecked") - public static void contributeValueEncoderSource(MappedConfiguration<Class, ValueEncoderFactory> configuration, - @Symbol(HibernateSymbols.PROVIDE_ENTITY_VALUE_ENCODERS) - boolean provideEncoders, final HibernateSessionSource sessionSource, final Session session, - final TypeCoercer typeCoercer, final PropertyAccess propertyAccess, final LoggerSource loggerSource) + public static void contributeValueEncoderSource( + MappedConfiguration<Class, ValueEncoderFactory> configuration, + @Symbol(HibernateSymbols.PROVIDE_ENTITY_VALUE_ENCODERS) boolean provideEncoders, + final HibernateSessionSource sessionSource, final Session session, + final TypeCoercer typeCoercer, final PropertyAccess propertyAccess, + final LoggerSource loggerSource) { if (!provideEncoders) return; - org.hibernate.cfg.Configuration config = sessionSource.getConfiguration(); - Iterator<PersistentClass> mappings = config.getClassMappings(); - while (mappings.hasNext()) + for (ClassMetadata classMetadata : sessionSource.getSessionFactory().getAllClassMetadata() + .values()) { - final PersistentClass persistentClass = mappings.next(); - final Class entityClass = persistentClass.getMappedClass(); + final Class entityClass = classMetadata.getMappedClass(); + final String idenfierPropertyName = classMetadata.getIdentifierPropertyName(); if (entityClass != null) { @@ -105,8 +104,9 @@ public class HibernateModule @Override public ValueEncoder create(Class type) { - return new HibernateEntityValueEncoder(entityClass, persistentClass, session, propertyAccess, - typeCoercer, loggerSource.getLogger(entityClass)); + return new HibernateEntityValueEncoder(entityClass, idenfierPropertyName, + session, propertyAccess, typeCoercer, + loggerSource.getLogger(entityClass)); } }; @@ -162,14 +162,9 @@ public class HibernateModule if (!entitySessionStatePersistenceStrategyEnabled) return; - org.hibernate.cfg.Configuration config = sessionSource.getConfiguration(); - Iterator<PersistentClass> mappings = config.getClassMappings(); - while (mappings.hasNext()) + for (ClassMetadata classMetadata : sessionSource.getSessionFactory().getAllClassMetadata().values()) { - - final PersistentClass persistentClass = mappings.next(); - final Class entityClass = persistentClass.getMappedClass(); - + final Class entityClass = classMetadata.getMappedClass(); configuration.add(entityClass, new ApplicationStateContribution(HibernatePersistenceConstants.ENTITY)); } } http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/2869383a/tapestry-hibernate/src/main/java/org/apache/tapestry5/internal/hibernate/HibernateEntityValueEncoder.java ---------------------------------------------------------------------- diff --git a/tapestry-hibernate/src/main/java/org/apache/tapestry5/internal/hibernate/HibernateEntityValueEncoder.java b/tapestry-hibernate/src/main/java/org/apache/tapestry5/internal/hibernate/HibernateEntityValueEncoder.java index 00bd68b..16e10f1 100644 --- a/tapestry-hibernate/src/main/java/org/apache/tapestry5/internal/hibernate/HibernateEntityValueEncoder.java +++ b/tapestry-hibernate/src/main/java/org/apache/tapestry5/internal/hibernate/HibernateEntityValueEncoder.java @@ -21,7 +21,6 @@ import org.apache.tapestry5.ioc.services.PropertyAdapter; import org.apache.tapestry5.ioc.services.TypeCoercer; import org.apache.tapestry5.ioc.util.ExceptionUtils; import org.hibernate.Session; -import org.hibernate.mapping.PersistentClass; import org.hibernate.mapping.Property; import org.slf4j.Logger; @@ -39,7 +38,7 @@ public final class HibernateEntityValueEncoder<E> implements ValueEncoder<E> private final Logger logger; - public HibernateEntityValueEncoder(Class<E> entityClass, PersistentClass persistentClass, Session session, + public HibernateEntityValueEncoder(Class<E> entityClass, String identifierPropertyName, Session session, PropertyAccess propertyAccess, TypeCoercer typeCoercer, Logger logger) { this.entityClass = entityClass; @@ -47,9 +46,7 @@ public final class HibernateEntityValueEncoder<E> implements ValueEncoder<E> this.typeCoercer = typeCoercer; this.logger = logger; - Property property = persistentClass.getIdentifierProperty(); - - propertyAdapter = propertyAccess.getAdapter(this.entityClass).getPropertyAdapter(property.getName()); + propertyAdapter = propertyAccess.getAdapter(this.entityClass).getPropertyAdapter(identifierPropertyName); } @Override http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/2869383a/tapestry-hibernate/src/test/java/org/apache/tapestry5/internal/hibernate/HibernateEntityValueEncoderTest.java ---------------------------------------------------------------------- diff --git a/tapestry-hibernate/src/test/java/org/apache/tapestry5/internal/hibernate/HibernateEntityValueEncoderTest.java b/tapestry-hibernate/src/test/java/org/apache/tapestry5/internal/hibernate/HibernateEntityValueEncoderTest.java index 564812c..f7bae32 100644 --- a/tapestry-hibernate/src/test/java/org/apache/tapestry5/internal/hibernate/HibernateEntityValueEncoderTest.java +++ b/tapestry-hibernate/src/test/java/org/apache/tapestry5/internal/hibernate/HibernateEntityValueEncoderTest.java @@ -19,8 +19,6 @@ import org.apache.tapestry5.ioc.services.PropertyAccess; import org.apache.tapestry5.ioc.services.TypeCoercer; import org.apache.tapestry5.ioc.test.IOCTestCase; import org.hibernate.Session; -import org.hibernate.mapping.Property; -import org.hibernate.mapping.RootClass; import org.slf4j.Logger; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; @@ -59,14 +57,10 @@ public class HibernateEntityValueEncoderTest extends IOCTestCase replay(); - RootClass persistentClass = new RootClass(); - Property idProperty = new Property(); - idProperty.setName("id"); - persistentClass.setIdentifierProperty(idProperty); SampleEntity entity = new SampleEntity(); HibernateEntityValueEncoder<SampleEntity> encoder = new HibernateEntityValueEncoder<SampleEntity>( - SampleEntity.class, persistentClass, session, access, typeCoercer, logger); + SampleEntity.class, "id", session, access, typeCoercer, logger); assertNull(encoder.toClient(entity)); @@ -85,14 +79,10 @@ public class HibernateEntityValueEncoderTest extends IOCTestCase replay(); - RootClass persistentClass = new RootClass(); - Property idProperty = new Property(); - idProperty.setName("id"); - persistentClass.setIdentifierProperty(idProperty); SampleEntity entity = new SampleEntity(); HibernateEntityValueEncoder<SampleEntity> encoder = new HibernateEntityValueEncoder<SampleEntity>( - SampleEntity.class, persistentClass, session, access, typeCoercer, logger); + SampleEntity.class, "id", session, access, typeCoercer, logger); assertNull(encoder.toValue("12345")); @@ -107,13 +97,8 @@ public class HibernateEntityValueEncoderTest extends IOCTestCase replay(); - RootClass persistentClass = new RootClass(); - Property idProperty = new Property(); - idProperty.setName("id"); - persistentClass.setIdentifierProperty(idProperty); - HibernateEntityValueEncoder<SampleEntity> encoder = new HibernateEntityValueEncoder<SampleEntity>( - SampleEntity.class, persistentClass, session, access, typeCoercer, logger); + SampleEntity.class, "id", session, access, typeCoercer, logger); try {
