This guide discusses migration to Hibernate ORM version 6.4. For migration from earlier versions, see any other pertinent migration guides as well.
Soft Delete
6.4 adds support for soft deletes, using the new @SoftDelete
annotation.
See the User Guide for details.
In previous versions, support for soft-deletes was somewhat implementable using
a combination of any or all of event-listeners, filters, @Where
, etc.
Applications using such implementations are encouraged to switch.
Custom tenant identifier type
The CurrentTenantIdentifierResolver
and MultiTenantConnectionProvider
SPIs were generified to support custom tenant identifier types.
Both types now accept a type parameter that represents the tenant identifier type.
Methods that were accepting or returning a tenant identifier value of type String
were changed to use the type variable.
Applications can migrate by specifying the type parameter <String>
when extending CurrentTenantIdentifierResolver
or one of the MultiTenantConnectionProvider
subtypes.
Removed IdGeneratorStrategyInterpreter
IdGeneratorStrategyInterpreter
has been deprecated since 6.0 and has been removed to simplify id generator internals.
Deprecation of FunctionRenderingSupport
The FunctionRenderingSupport
interface was deprecated for removal in favor of the new FunctionRenderer
interface.
FunctionRenderer
extends FunctionRenderingSupport
, so switching to the new type should not be a big deal.
Classes the previously implemented the FunctionRenderingSupport
interface should switch to implement FunctionRenderer
and the signature of the implemented render(SqlAppender, List, SqlAstTranslator)
method has to be changed to
render(SqlAppender, List, ReturnableType, SqlAstTranslator)
i.e. add ReturnableType
as second last argument.
The newly passed ReturnableType
argument allows the rendering process to consider the resolved function result type
during rendering, which is common for certain array specific functions, especially for Oracle.
Note that the deprecation also affects some methods/constructors of the SelfRenderingSqlAstExpression
type hierarchy,
which were previously accepting/returning a FunctionRenderingSupport
. Constructors that accept a FunctionRenderer
have been added to:
-
SelfRenderingSqmFunction
-
SelfRenderingSqmWindowFunction
-
SelfRenderingSqmAggregateFunction
-
SelfRenderingSqmOrderedSetAggregateFunction
-
SelfRenderingFunctionSqlAstExpression
-
SelfRenderingWindowFunctionSqlAstExpression
-
SelfRenderingAggregateFunctionSqlAstExpression
-
SelfRenderingOrderedSetAggregateFunctionSqlAstExpression
In addition, the SelfRenderingSqmFunction.getRenderingSupport()
method was deprecated in favor of the new SelfRenderingSqmFunction.getFunctionRenderer()
method.
Finally, the SelfRenderingFunctionSqlAstExpression.getRenderer()
method was deprecated in favor of the new SelfRenderingFunctionSqlAstExpression.getFunctionRenderer()
method.
Supported Dialects
Please also do have a look at the Supported Dialects document to check for potential upgrades to the minimum version of the databases underpinning the dialects that Hibernate currently supports.
Generated Values
Previous versions of Hibernate silently ignored annotations @GeneratedValue
applied to non identifier fields.
E.g.
@Entity
class Entity{
@Id
Integer id,
@GeneratedValue // Ignored in Hibernate versions < 6.4, since 6.4 an AnnotationException is thrown
String name;
}
From 6.4 this mapping is not allowed anymore and an AnnotationException
will be raised.