Projet JEE 7 sans hibernate ni JPA

Dans cet article, nous allons étudier la possibilité de créer un projet JEE 7 classique mais en supprimant la partie JPA / Hibernate.

Pierre LISERON
Mis à jour le 24 Janv 2024

Pourquoi se passer d’Hibernate?

Les gains de JPA / Hibernate sont rééls au début d’un projet :

Les problèmes majeurs d’Hibernate / JPA :

A cela se rajoutent des contraintes d’ordre organisationnel :

En fin de compte, il apparaît assez clairement avec l’expérience et le recul que les quelques facilités que JPA / Hibernate est susceptible de proposer sont insignifiantes en face de l’infinité de bugs et de difficultés de développement qu’il impose. Cette prise de conscience réalisée, le retour aux fondamentaux devient inéluctable.

Réalisation d’un projet sans Hibernate / JPA

Création de manager

Injection de la Datasource avec @Resource

private DataSource mDataSource;

Création d’une méthode de listing

public List listCommandeForClientId(int pIdClient) {
    String lSelectCommandeQuery = "SELECT  commande_id FROM client WHERE client_id=? ORDER BY id DESC";

    List lResults = new ArrayList();
    try (Connection lConnection = mDataSource.getConnection();
            PreparedStatement lPreparedStatement = lConnection
                    .prepareStatement(lSelectCommandeQuery);)
                    {
        lPreparedStatement.setInt(1, pIdClient);
        ResultSet rs = lPreparedStatement.executeQuery();
        Commande lCommande = null;
        while (rs.next()) {
            lCommande = new Commande();
            lCommande.setId(rs.getInt("commande_id"));
            lResults.add(lCommande);
        }
    } catch (SQLException e) {
        System.out.println(e.getMessage());
    }
    return lResults;
}

Conclusion

Le retour au JDBC est facilité par l’injection de la datasource et la gestion des pools de connexions par le serveur d’application, ainsi que par la structure de langage try-with-resources. De ce fait, cette technologie devient simple à implémenter, tout en étant clairement la plus performante dans le monde Java. L’ensemble des contraintes négatives apportées par JPA / Hibernate disparaissent, tandis qu’à l’inverse on regrette peu des avantages de ce dernier. On concèdera tout de même que les mappings champs à champs sont un peu fastidieux. Mais à chaque instant on sait ce que l’on a dans ses objets d’encapsulation de données, et l’on ne passe que les requêtes nécessaires. L’abandon d’Hibernate au profit de JDBC est donc bien bénéfique.

jpa