Releases: hibernate/hibernate-orm
Hibernate ORM 5.2.0
5.2.0 includes many improvements and bug-fixes. For a complete list of changes, see https://hibernate.atlassian.net/projects/HHH/versions/23150/tab/release-report-done.
Many of the changes in 5.2.0 have important ramifications in terms of both usage and extension. Be sure to read the 5.2 Migration Guide for details.
Below is a discussion of the major changes.
Java 8 baseline
5.2 moves to Java 8 as its baseline. This means:
- The
hibernate-java8
module has been removed, and that functionality has been moved intohibernate-core
. - Native support for Java 8 date/time types as Query parameters.
- Support for streaming (
java.util.stream.Stream
) query results. - Support for
java.util.Optional
as return from methods that may return null. - Leveraging Java 8 "default methods" when introducing new methods to extension points.
Consolidating JPA support into hibernate-core
.
That effectively means that the hibernate-entitymanager
module no longer exists. Its functionality being consumed into hibernate-core
.
JCache support
Support for using any JCache-compliant cache impl as a second-level caching provider.
Session-level batch size support
Support has been added for specifying a batch size for write operations per Session.
5th bug-fix release for 5.0
The 5th bug-fix release for Hibernate ORM 5.0. This release and the upcoming 5.0.6 release have been done on an accelerated time-box of 2 weeks (from the normal 4 weeks for bug-fix releases) due to US holidays.
The complete list of changes can be found here (or here for people without a Hibernate Jira account).
For information on consuming the release via your favorite dependency-management-capable build tool, see http://hibernate.org/orm/downloads/
For those of you allergic to dependency-management-capable build tools, the release bundles can be obtained from SourceForge or BinTray.
Fourth bug-fix release for 5.0
The fourth bug-fix release for Hibernate ORM 5.0
There are 52 issues resolved in this release. 20 of those came out of the recent Jira cleanup. Initially that initiative pulled in roughly 750 issues. To date, 66 of those have been resolved - fixed or verified as out-of-date, unable-to-reproduce, etc. An additional 14 have been more properly reclassified as feature or enhancement requests rather than bugs. The really cool part is the amount of community help we have gotten in making that happen! Thanks to everyone responding, verifying and even fixing alot of these bugs!
The complete list of changes can be found here. People without a Hibernate Jira account will not be able to access the previous link and can access the changelog in GitHub; the issue I reported with Atlassian has been resolved and is ready for deployment into our hosted environment, I just do not know when that will happen.
For information on consuming the release via your favorite dependency-management-capable build tool, see http://hibernate.org/orm/downloads/
For those of you allergic to dependency-management-capable build tools, the release bundles can be obtained from SourceForge or BinTray.
Third bug-fix release for 5.0
http://in.relation.to/2015/10/28/hibernate-orm-503-final-release/
Bug
* [HHH-1400] - formula-based property leads to generation of invalid SQL with subselect fetches
* [HHH-9074] - HQL Query with boolean and @Convert
* [HHH-9374] - EntityGraph applied to subquery when using collection function
* [HHH-9784] - scroll() and iterate() methods do not support provided HQLQueryPlan
* [HHH-10104] - Using JPA 2.1 schema generation together with hbm2ddl runs into deadlock with MySQL
* [HHH-10169] - Hibernate ignores foreign-key name in hbm <joined-subclass>
* [HHH-10170] - Reuse JAXBContext instance (Slow mapping initialization) - port HHH-10065 fix to 5.0 branch
* [HHH-10172] - Throw MappingException when entity/component class defines multiple matching getters by stem name
* [HHH-10174] - Incorrect splitting of string using dot as separator
* [HHH-10180] - hbm2ddl tools cannot generate create/update script not modifying the database
* [HHH-10188] - "stored" is a reserved keyword in MySQL 5.7
* [HHH-10189] - NPE in InformationExtractorJdbcDatabaseMetaDataImpl
* [HHH-10193] - NameQualifierSupport for Hypersonic should be catalog
* [HHH-10194] - Change NameQualifierSupport for Hypersonic from CATALOG to SCHEMA
* [HHH-10195] - QueryHintSQLServer2012Test is wrong
* [HHH-10196] - DefaultGeneratedValueTest fails on MySQL
* [HHH-10197] - SchemaManagementException when performing SchemaUpdate
* [HHH-10206] - Primary key not created for a Set after loading from XML mapping file
* [HHH-10207] - Constraint name not considered for a Set while loading from XML mapping file
* [HHH-10217] - ModelBinder fails to bind version property when generated="always"
Task
* [HHH-10137] - Upgrade to/support Jandex 2.0
* [HHH-10153] - Upgrade to Gradle 2.7
Improvement
* [HHH-10087] - Support prepending of locks
* [HHH-10190] - org.hibernate.engine.spi.ActionQueue#executeActions() optimization
Second bug-fix release for 5.0
The complete list of changes can be found here.
For information on consuming the release into your build via your favorite dependency-management-capable build tool, see http://hibernate.org/orm/downloads/.
For those of you allergic to dependency-management-capable build tools, the release bundles can be obtained from SourceForge or BinTray.
First bug-fix release for 5.0
The complete list of changes can be found here.
For information on consuming the release into your build via your favorite dependency-management-capable build tool, see http://hibernate.org/orm/downloads/.
For those of you allergic to dependency-management-capable build tools, the release bundles can be obtained from SourceForge or BinTray.
5.0.0 has gone Final!
Today I have released Hibernate ORM 5.0 (5.0.0.Final). This has been a long time coming and is the result
of the efforts of many folks. Thanks to everyone who helped us get here with fixes, bug reports, suggestions,
input and encouragement!
A lot of development has gone into 5.0. Here are the big points:
New bootstrap API
The venerable way to bootstrap Hibernate (build a SessionFactory) has been to use its Configuration class.
Configuration, historically, allowed users to iteratively add settings and mappings in any order and to query the
state of settings and mapping information in the middle of that process. Which meant that building the mapping
information could not effectively rely on any settings being available. This lead to many limitations and problems.
5.0 introduces a new bootstrapping API aimed at alleviating those limitations and problems, while allowing
better determinism and better integration. See the Bootstrap chapter in the User Guide for details on using
the new API.
Configuration is still available for use, although in a limited sense. Some of its methods have been removed. Under
the covers Configuration makes use of the new bootstrap API.
Spatial/GIS support
Hibernate Spatial is a project that has been around for a number of years. Karel Maesen has done an amazing job
with it.
Starting in 5.0 Hibernate Spatial is now part of the Hibernate project proper to allow it to better keep up with
upstream development. It is available as org.hibernate:hibernate-spatial
. If your application has need for
GIS data, we highly recommend giving hibernate-spatial a try.
Java 8 support
Well, ok.. not all of Java 8. Specifically we have added support for Java 8 Date and Time API in regards to easily mapping
attributes in your domain model using the Java 8 Date and Time API types to the database. This support is available
under the dedicated hibernate-java8 artifact (to isolate Java 8 dependencies). For additional information, see
the Basic Types chapter in the Domain Model Mapping Guide.
Expanded AUTO id generation support
JPA defines support for GenerationType#AUTO limited to just Number types. Starting in 5.0 Hibernate offers expandable support for a broader
set of types, including built-in support for both Number types (Integer, Long, etc) and UUID. Users are also free to plug
in custom strategies for interpreting GenerationType#AUTO via the new org.hibernate.boot.model.IdGeneratorStrategyInterpreter
extension.
Naming strategy split
NamingStrategy has been removed in favor of a better designed API. 2 distinct ones actually:
org.hibernate.boot.model.naming.ImplicitNamingStrategy
- used whenever a table or column is not explicitly named to determine the name to useorg.hibernate.boot.model.naming.PhysicalNamingStrategy
- used to convert a "logical name" (either implicit or explicit) name of a table or column
into a physical name (e.g. following corporate naming guidelines)
Attribute Converter support
5.0 offers significantly improved support for JPA 2.1 AttributeConverters:
- fully supported for non-@Enumerated enum values
- applicable in conjunction with @Nationalized support
- now called to handle null values
- settable in hbm.xml by using type="converter:fully.qualified.AttributeConverterName"
- integrated with hibernate-envers
- collection values, map keys
- support for conversion of parameterized types
Better "bulk id table" support
Support for "bulk id tables" has been completely redesigned to better fit what different databases support.
Transaction management
The transaction SPI underwent a major redesign as part of 5.0 as well. From a user perspective this generally
only comes into view in terms of configuration. Previously applications would work with the different backend
transaction stratagies directly via the org.hibernate.Transaction
API. In 5.0 a level of indirection has been
added here. The API implementation of org.hibernate.Transaction
is always the same now. On the backend, the
org.hibernate.Transaction
impl talks to a org.hibernate.resource.transaction.TransactionCoordinator
which represents
the "transactional context" for a given Session according to the backend transaction strategy. Users generally do not
need to care about the distinction.
The change is noted here because it might affect your bootstrap configuration. Whereas previously applications would
specify hibernate.transaction.factory_class
and refer to a org.hibernate.engine.transaction.spi.TransactionFactory
FQN,
with 5.0 the new contract is org.hibernate.resource.transaction.TransactionCoordinatorBuilder
and is specified using the
hibernate.transaction.coordinator_class
setting. See org.hibernate.cfg.AvailableSettings.TRANSACTION_COORDINATOR_STRATEGY
JavaDocs for additional details.
The following short-names are recognized:
jdbc
::(the default) says to use JDBC-based transactions (org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl
)
jta
::says to use JTA-based transactions (org.hibernate.resource.transaction.backend.jta.internal.JtaTransactionCoordinatorImpl
)
See the User Guide for additional details.
Schema Tooling
5.0 offers much improvement in the area of schema tooling (export, validation and migration).
Typed Session API
Hibernate's native APIs (Session, etc) have been updated to be typed. No more casting!
Improved OSGi support
Really this started with a frustration over the fragility of hibernate-osgi tests. The first piece was a better testing setup using
Pax Exam and Karaf. This lead to us generating (and now publishing!) a Hibernate Karaf features file.
OSGi support has undergone some general improvement as well thanks to feedback from some Karaf and Pax developers and users.
See the Getting Started Guide for additional details on using the new Karaf features file.
Improved bytrecode enhancement capabilities
- dirty tracking
- bidirectional association management
- lazy loading
Work on documentation
A lot of work has gone into the documentation for 5.0. Its still not complete (is documentation ever "complete"?), but it is much improved.
See the revamped http://hibernate.org/orm/documentation/5.0[documentation page] for details.
BinTray
For now the plan is to publish the release bundles (zip and tgz) to BinTray. We will continue to publish to SourceForge as well. For the time being
we will publish the bundles to both.
Ultimately we will start to publish the "maven" artifacts there as well.
This is all a work in progress.
How to get it
See http://hibernate.atlassian.net/projects/HHH/versions/20851 for the complete list of changes.
See http://hibernate.org/orm/downloads/ for information on obtaining the releases.
Fourth Candidate Release for ORM 5.0
The fourth candidate release for Hibernate ORM 5.0 (5.0.0.CR4). The purpose was entirely to change the defaults for some settings. This allowed some additional fixes and additional documentation work to make it in.
Default ImplicitNamingStrategy
The default ImplicitNamingStrategy (hibernate.implicit_naming_strategy
) has changed to the JPA-compliant one. Additionally added some short-names for the Hibernate-provided implementations.
- "default" -> org.hibernate.boot.model.naming.ImplicitNamingStrategyJpaCompliantImpl
- "jpa" -> org.hibernate.boot.model.naming.ImplicitNamingStrategyJpaCompliantImpl
- "legacy-jpa" -> org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl
- "legacy-hbm" -> org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyHbmImpl
- "component-path" -> org.hibernate.boot.model.naming.ImplicitNamingStrategyComponentPathImpl
The previous default was "legacy-jpa". Existing applications that previously used the default naming strategy
and want to continue to use that implicit naming strategy should specify hibernate.implicit_naming_strategy=legacy-jpa
in their configuration settings. Alternatively, they can call MetadataBuilder#setImplicitNamingStrategy(ImplicitNamingStrategyLegacyJpaImpl.INSTANCE)
.
Identifier generator mapping
Back in 3.6 I developed a new set of identifier generator strategies aimed at database portability based on the JPA expectations for @SequenceGenerator
and @TableGenerator
. Between 3.6 and now the default has been to continue to use the legacy generator strategies, but we added a setting (hibernate.id.new_generator_mappings
) to allow applications to request the newer strategies be used. The default for this setting had been false. The default is now true.
Existing applications updating to CR4 and then Final that experience issues with identifier generator strategy selection should try setting this back to false if they wish to keep using the legacy mappings.
Keyword auto-quoting
This is a new feature in 5.0, but previously the default had been to auto-quote any sql identifiers believed to be a keyword in the underlying database. That feature has been disabled by default.
Applications that wish to use this feature should explicitly enable it by specifying hibernate.auto_quote_keyword=true
in their configuration settings.
More work on the documentation
Still in progress, but alot more content has been added.
How to get it
Additionally many other improvements and bugfixes are included. See https://hibernate.atlassian.net/projects/HHH/versions/20752 for the complete list of changes.
The release tag is available at https://github.com/hibernate/hibernate-orm/releases/edit/5.0.0.CR4
As always, see http://hibernate.org/orm/downloads/ for information on obtaining the releases.
Third Candidate Release for 5.0
See https://hibernate.atlassian.net/projects/HHH/versions/20350 for the complete change list. The main changes since CR2 include:
Minor changes to the caching SPI
Essentially passing Session along to the various region access strategy methods to allow integrating with non-JDBC transactions.
Work on schema tooling
Improved namespace (catalog/schema) support overall in schema tools. Improved handling of views and synonyms for migrating and validating.
Work on bytecode enhancement
Lots of fixes based on feedback.
Consistency in Transaction API
A few changes were made to the JDCB-based TransactionCoordinator to work more like in JTA environments. Specifically:
- implemented support for marking the Transaction for rollback-only.
- transaction is now rolled back automatically on a failed commit.
Work on the documentation
Besides updating the content, the content has been split into 3 separate guides:
- User Guide
- Domain Model Mapping Guide
- Integrations Guide
Second Candidate Release for 5.0
The second candidate release for Hibernate ORM 5.0. CR2 was required because of a bug in how class-loading
worked in certain managed JPA environments. The details can be found in tttp://hibernate.atlassian.net/browse/HHH-9887. The main changes since CR1 include:
Corrected ClassLoader usage
This is the blocking issue mentioned above. The problem would occur in environments passing a "temp ClassLoader" into Hibernate via the JPA integration SPI (javax.persistence.spi.PersistenceUnitInfo#getNewTempClassLoader) and manifest itself
as ClassCastExceptions.
Second-level caching SPI improvement
The second-level caching SPI was improved, allowing the caching providers to generate cache keys. This includes the addition of the following methods:
- org.hibernate.cache.spi.access.EntityRegionAccessStrategy#generateCacheKey
- org.hibernate.cache.spi.access.CollectionRegionAccessStrategy#generateCacheKey
- org.hibernate.cache.spi.access.NaturalIdRegionAccessStrategy#generateCacheKey
Improved cache-by-reference support
For those making use of caching immutable entities by reference (rather than by "disassembled" state), an additional performance improvement is included in CR2.
Ability to disable auto-quoting of keyword-as-identifier
A new feature in 5.0 is the automatic quoting of identifiers that are believed to be keywords in the underlying database. As this support is new, often the Dialects are too aggressive in what they deem to be keywords. Thus we added a new setting to disable this behavior if it causes problems in your application. This can be controlled by specifying hibernate.auto_quote_keyword
as false in configuration settings.
Significantly improved bytecode enhancement support
Including:
- added ability for automatic management of bi-directional associations
- self-contained dirty state tracking (more efficient flushing), including switchable algorithms for dirty determination
Odds-n-ends
Additionally many other improvements and bugfixes are included. See https://hibernate.atlassian.net/projects/HHH/versions/20150 for the complete list of changes.
The release tag is available at https://github.com/hibernate/hibernate-orm/releases/tag/5.0.0.CR2
As always, see http://hibernate.org/orm/downloads/ for information on obtaining the releases.