Opened 9 years ago
Closed 9 years ago
#1979 closed enhancement (fixed)
Upgrade to Hibernate 5
Reported by: | Nicklas Nordborg | Owned by: | Nicklas Nordborg |
---|---|---|---|
Priority: | major | Milestone: | BASE 3.8 |
Component: | core | Version: | |
Keywords: | Cc: |
Description
Hibernate 5 was released about 6 months ago: http://in.relation.to/2015/08/20/hibernate-orm-500-final-release/
Hibernate 4.x and older are no longer maintained.
Change History (28)
comment:1 by , 9 years ago
comment:2 by , 9 years ago
(In [7054]) References #1979: Upgrade to Hibernate 5
Replaced Hibernate JAR and other files with those part of the Hibernate 5.0.7 release.
I currently get 51 errors and 35 warnings when trying to compile.
- Most seem related to changes in how Hibernate is configured via the
Configuration
class. - As a consequence database schema generation also has several errors.
- Transaction and session handling have lots of warnings.
comment:3 by , 9 years ago
comment:4 by , 9 years ago
comment:5 by , 9 years ago
comment:6 by , 9 years ago
comment:7 by , 9 years ago
comment:8 by , 9 years ago
comment:9 by , 9 years ago
(In [7061]) References #1979: Upgrade to Hibernate 5
Started to fix problems related to changes in database schema generation. Some code has been updated and some has simply been commented out for later fixing.
Down to 0 errors and 2 warnings when compiling.
Trying to start initdb
results in an exception:
ERROR core:344 - Exception while loading mapping files java.lang.UnsupportedOperationException: Cannot create XMLStreamReader or XMLEventReader from a javax.xml.transform.dom.DOMSource at com.sun.xml.internal.stream.XMLInputFactoryImpl.jaxpSourcetoXMLInputSource(Unknown Source) at com.sun.xml.internal.stream.XMLInputFactoryImpl.createXMLStreamReader(Unknown Source) at com.sun.xml.internal.stream.XMLInputFactoryImpl.createXMLEventReader(Unknown Source) at org.hibernate.boot.jaxb.internal.AbstractBinder.createReader(AbstractBinder.java:90) at org.hibernate.boot.jaxb.internal.AbstractBinder.bind(AbstractBinder.java:83) at org.hibernate.boot.jaxb.internal.JaxpSourceXmlSource.doBind(JaxpSourceXmlSource.java:29) at org.hibernate.boot.MetadataSources.addDocument(MetadataSources.java:409) at net.sf.basedb.core.HibernateUtil.addStaticMappings(HibernateUtil.java:339) at net.sf.basedb.core.HibernateUtil.init2(HibernateUtil.java:225) at net.sf.basedb.core.Application.start(Application.java:492) at net.sf.basedb.core.Install.createTables(Install.java:130) at net.sf.basedb.install.InitDB.main(InitDB.java:75)
comment:10 by , 9 years ago
(In [7062]) References #1979: Upgrade to Hibernate 5
Add configuration files with addInputStream(...)
instead of addDocument(...)
(after converting the XML Dom to a String). A new error:
org.hibernate.boot.InvalidMappingException: Could not parse mapping document: jar:file:/D:/Eclipse/Workspace/hibernate-5/www/WEB-INF/lib/base-core-3.8.0.jar!/net/sf/basedb/core/data/BioMaterialData.hbm.xml (INPUT_STREAM) at org.hibernate.boot.jaxb.internal.InputStreamXmlSource.doBind(InputStreamXmlSource.java:46) at org.hibernate.boot.jaxb.internal.InputStreamXmlSource.doBind(InputStreamXmlSource.java:38) at org.hibernate.boot.spi.XmlMappingBinderAccess.bind(XmlMappingBinderAccess.java:79) at org.hibernate.boot.MetadataSources.addInputStream(MetadataSources.java:369) at net.sf.basedb.core.HibernateUtil.addStaticMappings(HibernateUtil.java:343) at net.sf.basedb.core.HibernateUtil.init2(HibernateUtil.java:227) at net.sf.basedb.core.Application.start(Application.java:492) at net.sf.basedb.core.Install.createTables(Install.java:130) at net.sf.basedb.install.InitDB.main(InitDB.java:75) Caused by: org.hibernate.boot.MappingException: Unable to perform unmarshalling at line number 80 and column 68. Message: cvc-complex-type.2.4.a: Invalid content was found starting with element 'filter'. One of '{"http://www.hibernate.org/xsd/orm/hbm":property, "http://www.hibernate.org/xsd/orm/hbm":many-to-one, "http://www.hibernate.org/xsd/orm/hbm":one-to-one, "http://www.hibernate.org/xsd/orm/hbm":component, "http://www.hibernate.org/xsd/orm/hbm":dynamic-component, "http://www.hibernate.org/xsd/orm/hbm":properties, "http://www.hibernate.org/xsd/orm/hbm":any, "http://www.hibernate.org/xsd/orm/hbm":map, "http://www.hibernate.org/xsd/orm/hbm":set, "http://www.hibernate.org/xsd/orm/hbm":list, "http://www.hibernate.org/xsd/orm/hbm":bag, "http://www.hibernate.org/xsd/orm/hbm":array, "http://www.hibernate.org/xsd/orm/hbm":primitive-array, "http://www.hibernate.org/xsd/orm/hbm":idbag, "http://www.hibernate.org/xsd/orm/hbm":join, "http://www.hibernate.org/xsd/orm/hbm":subclass, "http://www.hibernate.org/xsd/orm/hbm":loader, "http://www.hibernate.org/xsd/orm/hbm":sql-insert, "http://www.hibernate.org/xsd/orm/hbm":sql-update, "http://www.hibernate.org/xsd/orm/hbm":sql-delete, "http://www.hibernate.org/xsd/orm/hbm":fetch-profile, "http://www.hibernate.org/xsd/orm/hbm":resultset, "http://www.hibernate.org/xsd/orm/hbm":query, "http://www.hibernate.org/xsd/orm/hbm":sql-query}' is expected. : origin(jar:file:/D:/Eclipse/Workspace/hibernate-5/www/WEB-INF/lib/base-core-3.8.0.jar!/net/sf/basedb/core/data/BioMaterialData.hbm.xml) at org.hibernate.boot.jaxb.internal.AbstractBinder.jaxb(AbstractBinder.java:177) at org.hibernate.boot.jaxb.internal.MappingBinder.doBind(MappingBinder.java:61) at org.hibernate.boot.jaxb.internal.AbstractBinder.doBind(AbstractBinder.java:102) at org.hibernate.boot.jaxb.internal.AbstractBinder.bind(AbstractBinder.java:57) at org.hibernate.boot.jaxb.internal.InputStreamXmlSource.doBind(InputStreamXmlSource.java:43) ... 8 more
comment:11 by , 9 years ago
(In [7063]) References #1979: Upgrade to Hibernate 5
Temporarily disable adding <filter>
tag to <subclass>
elements.
Database schema generation is working now and initdb.bat
runs without errors. The database that is generated is more or less the same. The following differences have been found (PostgreSQL/MySQL):
- Different column order in some
create table...
statements (not critical) - Some sql statements are generated in different order (not critical)
- Different names for unique/foreign keys (not critical and expected since names are randomly generated)
- Missing sequences for raw data tables (PostgreSQL only; needs to be fixed)
comment:12 by , 9 years ago
comment:13 by , 9 years ago
comment:14 by , 9 years ago
comment:15 by , 9 years ago
comment:16 by , 9 years ago
(In [7068]) References #1979: Upgrade to Hibernate 5
TestProject
failed when trying to set a default item. Seems like Hibernate is trying to insert a 'null' value instead of the data class name. Setting an empty meta-type
value for the mapping seems to fix the problem. Below is the stacktrace:
--Set default item FAILED (Protocol; id=1069) net.sf.basedb.core.DatabaseException: ERROR: null value in column "data_class" violates not-null constraint Detail: Failing row contains (1075, null, 1069). at net.sf.basedb.core.HibernateUtil.commit(HibernateUtil.java:1352) at net.sf.basedb.core.DbControl.commit(DbControl.java:515) at TestProject.test_defaultItem(TestProject.java:117) at TestProject.test_all(TestProject.java:79) at TestProject.main(TestProject.java:39) Caused by: org.postgresql.util.PSQLException: ERROR: null value in column "data_class" violates not-null constraint Detail: Failing row contains (1075, null, 1069). at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2270) at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1998) at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255) at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:570) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:420) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:366) at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUpdate(NewProxyPreparedStatement.java:461) at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:204) at org.hibernate.engine.jdbc.batch.internal.NonBatchingBatch.addToBatch(NonBatchingBatch.java:45) at org.hibernate.persister.collection.AbstractCollectionPersister.recreate(AbstractCollectionPersister.java:1313) at org.hibernate.action.internal.CollectionRecreateAction.execute(CollectionRecreateAction.java:50) at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:560) at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:434) at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:337) at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:39) at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1282) at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:465) at org.hibernate.internal.SessionImpl.flushBeforeTransactionCompletion(SessionImpl.java:2963) at org.hibernate.internal.SessionImpl.beforeTransactionCompletion(SessionImpl.java:2339) at org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.beforeTransactionCompletion(JdbcCoordinatorImpl.java:485) at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl.beforeCompletionCallback(JdbcResourceLocalTransactionCoordinatorImpl.java:147) at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl.access$100(JdbcResourceLocalTransactionCoordinatorImpl.java:38) at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl$TransactionDriverControlImpl.commit(JdbcResourceLocalTransactionCoordinatorImpl.java:231) at org.hibernate.engine.transaction.internal.TransactionImpl.commit(TransactionImpl.java:65) at net.sf.basedb.core.HibernateUtil.commit(HibernateUtil.java:1347) ... 4 more
comment:17 by , 9 years ago
comment:18 by , 9 years ago
(In [7070]) References #1979: Upgrade to Hibernate 5
Fixing issues with <filter> definitions. The previous strategy that added <filter> tags dynamically to the hbm.xml files doesn't work since <filter> inside <subclass> doesn't validate against the schema. Instead we need to collect the filters that we want to define and then wait until the configuration process has come far enough so that we have access to a Metadata
instance and PersistentCollection
objects. This is similar to how filters was registered before the changes in [5477] #1547.
comment:19 by , 9 years ago
(In [7071]) References #1979: Upgrade to Hibernate 5
Seems like Hibernate schema update tool once again has problems with generating duplicates (see [6668]). This time it is foreign key definitions that are generated and created with new names. I think it is better to let Hibernate only generate the tables and instead implement the index and foreign key creation into or own code. Most of what is needed is already present in DbIndexWork
and related classes. It just needs to be packaged a bit differently. If we do this then there is also no need to manually run updateindexes.sh
as part of the installation.
In this changeset I have made changes so that all "create index" and "alter table...drop|add constraint" SQL statemnts are ignored.
comment:20 by , 9 years ago
(In [7072]) References #1979: Upgrade to Hibernate 5
Major changes to the database schema creation/update procedure. Basically we only trust Hibernate to create the tables and add columns to existing tables. Foreign keys and indexes are now created and managed with the DbIndexWork
class instead. This has now been integrated into the main installation and there should be no need to run updateindexes.sh
after an installation. The documentation need to be updated.
comment:21 by , 9 years ago
comment:22 by , 9 years ago
comment:23 by , 9 years ago
comment:24 by , 9 years ago
comment:25 by , 9 years ago
comment:26 by , 9 years ago
Owner: | changed from | to
---|---|
Status: | new → assigned |
comment:27 by , 9 years ago
(In [7144]) References #1979: Upgrade to Hibernate 5
'null' and an empty set is no longer considered equal by Hibernate. We need to return the same instance as given to us by Hibernate or Hibernate will generate an UPDATE query for the item. Since nothing has actually changed the update only increases the 'version' property which may lead to StaleStateException
(Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1)
comment:28 by , 9 years ago
Resolution: | → fixed |
---|---|
Status: | assigned → closed |
All tests have now been completed successfully.
(In [7053]) References #1979: Upgrade to Hibernate 5
Creating branch for working with this update since it will likely cause a lot of things to stop working initially.