This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository topia-2.x. See https://gitlab.nuiton.org/nuiton/topia-2.x.git commit 6820fc098beb6fd033b315c02ccc9b069809ee7a Author: Eric Chatellier <chatellier@codelutin.com> Date: Fri Oct 13 15:52:29 2017 +0200 fixes #3: Update to Hibernate 5.2.11 --- pom.xml | 2 +- .../topia/framework/TopiaConnectionProvider.java | 2 +- .../nuiton/topia/framework/TopiaContextImpl.java | 85 +++++++++++----------- .../topia/generator/DAOAbstractTransformer.java | 2 +- .../topia/generator/EntityDAOTransformer.java | 4 +- .../nuiton/topia/persistence/util/DBMapping.java | 3 +- .../nuiton/topia/persistence/NaturalIdTest.java | 3 +- 7 files changed, 51 insertions(+), 50 deletions(-) diff --git a/pom.xml b/pom.xml index 51e039e2..8d197e19 100644 --- a/pom.xml +++ b/pom.xml @@ -205,7 +205,7 @@ <processorPluginVersion>1.3</processorPluginVersion> <nuitonI18nVersion>3.6.3</nuitonI18nVersion> <xmlrpcVersion>3.1.2</xmlrpcVersion> - <hibernateVersion>5.1.5.Final</hibernateVersion> + <hibernateVersion>5.2.11.Final</hibernateVersion> <sl4jVersion>1.7.25</sl4jVersion> <h2Version>1.4.194</h2Version> <hamcrestVersion>1.3</hamcrestVersion> diff --git a/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaConnectionProvider.java b/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaConnectionProvider.java index 5929b33e..fde72050 100644 --- a/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaConnectionProvider.java +++ b/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaConnectionProvider.java @@ -135,7 +135,7 @@ public class TopiaConnectionProvider implements ConnectionProvider, Configurable if (isolation != null) { if (log.isDebugEnabled()) { log.debug("JDBC isolation level: " + - Environment.isolationLevelToString(isolation)); + ConnectionProviderInitiator.toIsolationNiceName(isolation)); } } diff --git a/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaContextImpl.java b/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaContextImpl.java index bd9bfbd0..0d13d84e 100644 --- a/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaContextImpl.java +++ b/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaContextImpl.java @@ -24,39 +24,12 @@ package org.nuiton.topia.framework; -import static org.nuiton.i18n.I18n.t; - -import java.beans.PropertyChangeListener; -import java.io.BufferedInputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.InputStream; -import java.lang.reflect.Field; -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.EnumSet; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Properties; -import java.util.Set; -import java.util.WeakHashMap; -import java.util.zip.GZIPInputStream; - import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hibernate.FlushMode; import org.hibernate.HibernateException; -import org.hibernate.Query; import org.hibernate.ReplicationMode; -import org.hibernate.SQLQuery; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; @@ -68,6 +41,10 @@ import org.hibernate.engine.jdbc.connections.spi.ConnectionProvider; import org.hibernate.event.service.spi.EventListenerRegistry; import org.hibernate.event.spi.EventType; import org.hibernate.jdbc.Work; +import org.hibernate.metamodel.spi.MetamodelImplementor; +import org.hibernate.persister.entity.EntityPersister; +import org.hibernate.query.NativeQuery; +import org.hibernate.query.Query; import org.hibernate.service.ServiceRegistry; import org.hibernate.service.spi.Stoppable; import org.hibernate.tool.hbm2ddl.SchemaExport; @@ -88,6 +65,31 @@ import org.nuiton.topia.persistence.TopiaDAOImpl; import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.topia.persistence.TopiaId; +import java.beans.PropertyChangeListener; +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStream; +import java.lang.reflect.Field; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.EnumSet; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Properties; +import java.util.Set; +import java.util.WeakHashMap; +import java.util.zip.GZIPInputStream; + +import static org.nuiton.i18n.I18n.t; + /** * Le TopiaContextImpl est le point d'entre pour acceder aux donnees. Il est * configurer par un fichier de propriete @@ -643,14 +645,13 @@ public class TopiaContextImpl implements TopiaContextImplementor { throw new TopiaException( t("topia.persistence.error.rootContext.access")); } - if (getHibernateFactory().getClassMetadata(entityClass) == null && - getHibernateFactory().getClassMetadata( - entityClass.getName() + "Impl") == null && - getHibernateFactory().getClassMetadata( - entityClass.getName() + "Abstract") == null) { - - log.info(t("topia.persistence.supported.classes.for.context", - getHibernateFactory().getAllClassMetadata().keySet())); + MetamodelImplementor metamodel = (MetamodelImplementor)getHibernateFactory().getMetamodel(); + Map<String, EntityPersister> entityPersisterMap = metamodel.entityPersisters(); + if (entityPersisterMap.get(entityClass) == null && + entityPersisterMap.get(entityClass.getName() + "Impl") == null && + entityPersisterMap.get(entityClass.getName() + "Abstract") == null) { + + log.info(t("topia.persistence.supported.classes.for.context", entityPersisterMap.keySet())); throw new TopiaException( t("topia.persistence.error.unsupported.class", entityClass.getName())); @@ -698,7 +699,7 @@ public class TopiaContextImpl implements TopiaContextImplementor { // new TopiaInterceptor(result)); // on ne synchronise jamais les données avec la base tant que // l'utilisateur n'a pas fait de commit du context - result.hibernate.setFlushMode(FlushMode.MANUAL); + result.hibernate.setHibernateFlushMode(FlushMode.MANUAL); // tchemit 2010-12-06 propagates the value of the flag result.useFlushMode = useFlushMode; @@ -795,7 +796,7 @@ public class TopiaContextImpl implements TopiaContextImplementor { // it's very important to change the session after rollback // otherwize there are many error during next Entity's modification hibernate = getHibernateFactory().openSession(); - hibernate.setFlushMode(FlushMode.MANUAL); + hibernate.setHibernateFlushMode(FlushMode.MANUAL); hibernate.beginTransaction(); @@ -948,7 +949,7 @@ public class TopiaContextImpl implements TopiaContextImplementor { } // tchemit 2010-11-30 reproduce the same behaviour than before with the dao legacy if (useFlushMode) { - query.setFlushMode(FlushMode.AUTO); + query.setHibernateFlushMode(FlushMode.AUTO); } List result = query.list(); result = firesSupport.fireEntitiesLoad(this, result); @@ -982,7 +983,7 @@ public class TopiaContextImpl implements TopiaContextImplementor { query.setMaxResults(endIndex - startIndex + 1); // tchemit 2010-11-30 reproduce the same behaviour than before with the dao legacy if (useFlushMode) { - query.setFlushMode(FlushMode.AUTO); + query.setHibernateFlushMode(FlushMode.AUTO); } List result = query.list(); result = firesSupport.fireEntitiesLoad(this, result); @@ -1148,7 +1149,7 @@ public class TopiaContextImpl implements TopiaContextImplementor { options += " COMPRESSION GZIP"; } - SQLQuery query = getHibernate().createSQLQuery( + NativeQuery query = getHibernate().createNativeQuery( "SCRIPT TO '" + file.getAbsolutePath() + "'" + options); query.list(); @@ -1195,7 +1196,7 @@ public class TopiaContextImpl implements TopiaContextImplementor { in.close(); } - SQLQuery query = getHibernate().createSQLQuery( + NativeQuery query = getHibernate().createNativeQuery( "RUNSCRIPT FROM '" + file.getAbsolutePath() + "'" + options); query.executeUpdate(); @@ -1224,7 +1225,7 @@ public class TopiaContextImpl implements TopiaContextImplementor { if (dropDatabase) { sql += " DELETE FILES"; } - Query query = tx.getHibernate().createSQLQuery(sql); + Query query = tx.getHibernate().createNativeQuery(sql); query.executeUpdate(); tx.closeContext(); diff --git a/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOAbstractTransformer.java b/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOAbstractTransformer.java index 031247cd..8277a99c 100644 --- a/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOAbstractTransformer.java +++ b/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOAbstractTransformer.java @@ -458,7 +458,7 @@ public class DAOAbstractTransformer extends ObjectModelTransformerToJava { body.append("" /*{ { - List<<%=attrType%>> list = getContext().getHibernate().createSQLQuery( + List<<%=attrType%>> list = getContext().getHibernate().createNativeQuery( "SELECT main.topiaid " + "from <%=attrClassifierDBName%> main, <%=attrJoinTableName%> secondary " + "where main.topiaid=secondary.<%=attrDBName%>" + diff --git a/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDAOTransformer.java b/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDAOTransformer.java index b9c301ec..b19f9026 100644 --- a/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDAOTransformer.java +++ b/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDAOTransformer.java @@ -625,13 +625,13 @@ public class EntityDAOTransformer extends ObjectModelTransformerToJava { body.append("" /*{ { - List<<%=attrType%>> list = getContext().getHibernate().createSQLQuery( + List<<%=attrType%>> list = getContext().getHibernate().createNativeQuery( " SELECT main.*" + " FROM <%=attrClassifierDBName%> main, <%=attrJoinTableName%> secondary" + " WHERE main.topiaid = secondary.<%=attrDBName%>" + " AND secondary.<%=attrReverseDBName%> = ?") .addEntity("main", <%=providerFQN%>(<%=attrType%>.class)) - .setString(0, entity.getTopiaId()) + .setParameter(1, entity.getTopiaId()) .list(); for (<%=attrType%> item : list) { diff --git a/topia-persistence/src/main/java/org/nuiton/topia/persistence/util/DBMapping.java b/topia-persistence/src/main/java/org/nuiton/topia/persistence/util/DBMapping.java index efb467f5..fd543a86 100644 --- a/topia-persistence/src/main/java/org/nuiton/topia/persistence/util/DBMapping.java +++ b/topia-persistence/src/main/java/org/nuiton/topia/persistence/util/DBMapping.java @@ -27,6 +27,7 @@ package org.nuiton.topia.persistence.util; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hibernate.exception.SQLGrammarException; +import org.hibernate.query.NativeQuery; import org.nuiton.topia.TopiaContext; import org.nuiton.topia.TopiaException; import org.nuiton.topia.framework.TopiaContextImpl; @@ -326,7 +327,7 @@ public abstract class DBMapping { BigInteger size = defaultSize; if (ctxt != null) { try { - SQLQuery query = ((TopiaContextImpl) ctxt).getHibernate().createSQLQuery(sql); + NativeQuery query = ((TopiaContextImpl) ctxt).getHibernate().createNativeQuery(sql); size = (BigInteger) query.list().get(0); } catch (SQLGrammarException e) { // could not obtain sequence diff --git a/topia-persistence/src/test/java/org/nuiton/topia/persistence/NaturalIdTest.java b/topia-persistence/src/test/java/org/nuiton/topia/persistence/NaturalIdTest.java index 4e0c39ed..006b15ef 100644 --- a/topia-persistence/src/test/java/org/nuiton/topia/persistence/NaturalIdTest.java +++ b/topia-persistence/src/test/java/org/nuiton/topia/persistence/NaturalIdTest.java @@ -114,8 +114,7 @@ public class NaturalIdTest { entity.setNaturalIdNotNull(8); transaction.commitTransaction(); } catch (TopiaException eee) { - Assert.assertEquals("org.hibernate.HibernateException", - eee.getCause().getClass().getName()); + Assert.assertEquals(javax.persistence.PersistenceException.class, eee.getCause().getClass()); } } -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.