This documentation section is french-only

Gestion des dépendances

MANDATORY

Java 11 est désormais nécessaire.

ToPIA 4.0 nécessite des versions minimum de Eugene et Hibernate. Vous devez utiliser les version suivantes :

  • Eugene >= 3.0
  • Hibernate >= 6.3.1.Final

Des dépendances transitives de ToPIA on changé, il faut remplacer

<groupId>org.hibernate</groupId>

par

<groupId>org.hibernate.orm</groupId>

Et remplacer

<groupId>javax.persistence</groupId>
<artifactId>javax.persistence-api</artifactId>
<version>2.2</version>

par

<groupId>jakarta.persistence</groupId>
<artifactId>jakarta.persistence-api</artifactId>
<version>3.1.0</version>

Nom de colonnes désormais interdits

Il semble qu’Hibernate ne fonctionne plus quand des noms de colonnes sont des mot-clés SQL. Par exemple key fonctionnait mais ne fonctionne plus, il faut changer le modèle.

Déclaration des functions SQL

Si vous avez défini des fonctions SQL dans la base de données, vous avez les avez déclarées dans le Dialect Hibernate 5 de la façon suivante.

Avant :

public class MyHibernatePostgreSQLDialect extends PostgreSQL95Dialect {

    private static final StandardSQLFunction PREPARE_FOR_FUZZY_SEARCH =
            new StandardSQLFunction("prepare_for_fuzzy_search", StandardBasicTypes.TEXT);

    public EncAhiHibernatePostgreSQLDialect() {
        super();
        registerFunction(PREPARE_FOR_FUZZY_SEARCH.getName(), PREPARE_FOR_FUZZY_SEARCH);
    }

}

Après :

public class MyHibernatePostgreSQLDialect extends PostgreSQLDialect {

    @Override
    public void initializeFunctionRegistry(FunctionContributions functionContributions) {
        super.initializeFunctionRegistry(functionContributions);
        BasicTypeRegistry basicTypeRegistry = functionContributions.getTypeConfiguration().getBasicTypeRegistry();
        functionContributions.getFunctionRegistry().patternDescriptorBuilder("prepare_for_fuzzy_search", "prepare_for_fuzzy_search(?1)")
                .setInvariantType(basicTypeRegistry.resolve(StandardBasicTypes.STRING))
                .setExactArgumentCount(1)
                .setParameterTypes(FunctionParameterType.STRING)
                .register();
    }
}

Création de LOB Hibernate

MANDATORY

Avant :

Session hibernateSession = getHibernateSupport().getHibernateSession();
Blob blob = Hibernate.getLobCreator(hibernateSession).createBlob(inputStream, inputStream.available());
return blob;

Après :

Session hibernateSession = getHibernateSupport().getHibernateSession();
Blob blob = hibernateSession.getLobHelper().createBlob(inputStream.readAllBytes());
return blob;

Changement des directives de configuration

MANDATORY

Les directives de configuration des la connexion JDBC de Hibernate sont à remplacer au profit de celles normées en jakarta.*

  • hibernate.connection.driver_classjakarta.persistence.jdbc.driver
  • hibernate.connection.usernamejakarta.persistence.jdbc.user
  • hibernate.connection.passwordjakarta.persistence.jdbc.password
  • hibernate.connection.urljakarta.persistence.jdbc.url

Au delà de ces directives, tout ce qui est en hibernate.* peut être à remplacer en jakarta.persistence., à vérifier selon chaque paramètre utilisé.

Modifications à faire si vous utilisez bean-validation

MANDATORY

Passer de javax.validation à jakarta.validation dans les directives de configuration.

Ajouter

<dependency>
    <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator</artifactId>
    <scope>runtime</scope>
</dependency>

Attention aux appels de méthodes visant à forcer Hibernate à charger des champs en lazy

MANDATORY

Des erreurs peuvent apparaître à l’exécution à cause de champs qui ne seraient pas initialisés. Si vous faisiez des appels de méthodes sur des champs d’entités dans l’intention de forcer Hibernate à charger des champs avant de fermer une transaction, il est possible que ces appels ne fonctionnent plus car Hibernate 6 est plus efficace et peut éviter de faire ces chargement inutiles. Une solution est de toujours appeler ces getters mais d’appeler org.hibernate.Hibernate#initialize(Object) dessus pour forcer le chargement.

TopiaMigrationEngine déprécié

RECOMMENDED

Il fonctionne toujours mais est déprécié. Migrez vers Flyway ou Liquibase.