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.