Saltar al contenido

Hibernate Envers con Spring Boot – configuración

Esta es la contestación más correcta que te podemos compartir, sin embargo mírala pausadamente y valora si se puede adaptar a tu proyecto.

Solución:

Para todos aquellos ajustes de configuración que no están disponibles de forma predeterminada, puede especificarlos simplemente prefijándolos con spring.jpa.properties. Esas propiedades se añadirán, tal cual, a la EntityManagerFactory (como Propiedades JPA).

spring.jpa.properties.org.hibernate.envers.default_schema=app_audit 

Sumando lo anterior a la application.properties agregará las propiedades y debe configurar Hibernate Envers.

Esto también está documentado en la guía de referencia de Spring Boot.

Enlaces

  1. Configurar propiedades JPA
  2. Envers Propiedades

Mirando a través de la clase HibernateJpaAutoConfiguration, no puedo ver ningún soporte para las propiedades envers. Es posible que la siguiente no sea la mejor solución, pero, sin embargo, puede intentarlo.

Para que Spring Boot admita las propiedades envers, debe:

  1. anula la clase de configuración automática actual que Spring Boot usa para configurar las propiedades de Hibernate, por lo que leerá las propiedades envers de sus archivos de propiedades. Esto leerá el spring.jpa.hibernate.envers.default_schema de su archivo y agréguelo a las propiedades del entidadAdministradorFábricaBean:

    @Configuration
    public class HibernateEnversAutoConfiguration extends HibernateJpaAutoConfiguration 
    
       private RelaxedPropertyResolver environment;
    
       public HibernateEnversAutoConfiguration() 
           this.environment = null;
       
    
       @Override
       public void setEnvironment(Environment environment) 
           super.setEnvironment(environment);
           this.environment = new RelaxedPropertyResolver(environment, "spring.jpa.hibernate.");
       
    
       @Override
       protected void configure(LocalContainerEntityManagerFactoryBean entityManagerFactoryBean) 
           super.configure(entityManagerFactoryBean);
           Map properties = entityManagerFactoryBean.getJpaPropertyMap();
           properties.put("hibernate.envers.default_schema", this.environment.getProperty("envers.default_schema"));
       
    
    
  2. excluya la HibernateJpaAutoConfiguration original que usa Spring Boot y agregue la suya propia como un bean para que sea reemplazada:

    @EnableAutoConfiguration(exclude = HibernateJpaAutoConfiguration.class)
    @EnableJpaRepositories(basePackages = "com.gabrielruiu.test")
    @EntityScan(basePackages = "com.gabrielruiu.test")
    @ComponentScan(basePackages = "com.gabrielruiu.test")
    @Configuration
    public class Main 
    
        public static void main(String[] args) 
            SpringApplication.run(Main.class, args);
      
    
        @Bean
        public HibernateEnversAutoConfiguration hibernateEnversAutoConfiguration() 
            return new HibernateEnversAutoConfiguration();
        
    
    

Para aquellos que usan mysql y Bota de primaverala sugerencia de usar:

spring.jpa.properties.org.hibernate.envers.default_schema=yourAuditSchema no trabajará.

Usa esto en su lugar:

spring.jpa.properties.org.hibernate.envers.default_catalog=yourAuditSchema

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *