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
- Configurar propiedades JPA
- 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:
-
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")); -
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