Class HibernateModule

java.lang.Object
io.jooby.hibernate.HibernateModule
All Implemented Interfaces:
Extension

public class HibernateModule extends Object implements Extension
Hibernate ORM module: https://jooby.io/modules/hibernate.

Usage:

- Add hikari and hibernate dependency

- Install them


 {
   install(new HikariModule());

   install(new HibernateModule());
 }
 
- Use it

 {

   get("/", ctx -> {
     EntityManagerFactory emf = require(EntityManagerFactory.class);
     // do with emf
   });

 }
 
Optionally, you can require/inject a SessionFactory too:

 {

   get("/", ctx -> {
     SessionFactory sf = require(SessionFactory.class);
     // do with sf
   });

 }
 
By default the hibernate module scan the Jooby.getBasePackage() to register all the persistent classes. To scan a different package use the scan(String...) method.

To turn it off you need to specify all the persistent classes at creation time, using the HibernateModule(Class[]) constructor.

It is important to close either an EntityManager or Session created manually from EntityManagerFactory and SessionFactory.

So code around session/entityManager looks like:


 get("/", ctx -> {
   EntityManager em = require(EntityManager.class);
   Transaction trx = em.getTransaction();
   try {
     trx.begin();

     // work with EntityManager compute a result

     trx.commit();

     return result;
   } catch(Exception x) {
     trx.rollback();
     throw x;
   } finally {
     em.close();
   }
 });
 
To avoid all these lines of code we do provide a TransactionalRequest decorator so code looks more simple:

 use(new TransactionalRequest());

 get("/", ctx -> {
   EntityManager em = require(EntityManager.class);
   // work with EntityManager compute a result
   return result;
 });
 
Transaction and lifecycle of session/entityManager is managed by TransactionalRequest.

Complete documentation is available at: https://jooby.io/modules/hibernate.

Since:
2.0.0
Author:
edgar
  • Constructor Details

    • HibernateModule

      public HibernateModule(@NonNull String name, Class... classes)
      Creates a Hibernate module.
      Parameters:
      name - The name/key of the data source to attach.
      classes - Persistent classes.
    • HibernateModule

      public HibernateModule(Class... classes)
      Creates a new Hibernate module. Use the default/first datasource and register objects using the db key.
      Parameters:
      classes - Persistent classes.
    • HibernateModule

      public HibernateModule(@NonNull String name, List<Class> classes)
      Creates a Hibernate module.
      Parameters:
      name - The name/key of the data source to attach.
      classes - Persistent classes.
  • Method Details

    • scan

      @NonNull public HibernateModule scan(@NonNull String... packages)
      Scan packages and look for persistent classes.
      Parameters:
      packages - Package names.
      Returns:
      This module.
    • scan

      @NonNull public HibernateModule scan(@NonNull List<String> packages)
      Scan packages and look for persistent classes.
      Parameters:
      packages - Package names.
      Returns:
      This module.
    • with

      @NonNull public HibernateModule with(@NonNull SessionProvider sessionProvider)
      Allow to customize a Session before opening it.
      Parameters:
      sessionProvider - Session customizer.
      Returns:
      This module.
    • with

      @NonNull public HibernateModule with(@NonNull HibernateConfigurer configurer)
      Hook into Hibernate bootstrap components and allow to customize them.
      Parameters:
      configurer - Configurer.
      Returns:
      This module.
    • install

      public void install(@NonNull Jooby application)
      Specified by:
      install in interface Extension