Стратегия именования Hibernate

Я создаю веб-сервис REST с Spring (Boot) и пытаюсь использовать hibernate как ORM mapper без какой-либо конфигурации xml.

Я в основном получил его для работы, но я застрял с проблемой конфигурации. Я инстанцировать LocalContainerEntityManagerFactoryBean as @Bean в файле @Configuration.

Я hibernate.ejb.naming_strategy как в следующем примере -> это, похоже, работает для создания таблиц, если они не существуют (имена столбцов-camelCase, как в моих классах @ Entity), но когда запрос выполненный, hibernate "забывает" об этой конфигурации именования и пытается использовать другой вид стратегии именования с under_score_attributes --> очевидно, что эти запросы терпят неудачу. Есть ли какое-либо другое свойство, которое мне нужно установить?

или другой способ настройки свойств предпочтительно без добавлять cfg.xml или persistence.xml?

LocalContainerEntityManagerFactoryBean lef = new LocalContainerEntityManagerFactoryBean();   
Properties props = new Properties();
props.put("hibernate.hbm2ddl.auto", "create");
props.put("hibernate.ejb.naming_strategy","org.hibernate.cfg.DefaultNamingStrategy");
lef.setJpaProperties(props); 
lef.afterPropertiesSet();

3 ответов


HibernateJpaAutoConfiguration позволяет задавать стратегию именования (и все другие свойства JPA) через локальную внешнюю конфигурацию. Например, в application.properties:

spring.jpa.hibernate.ddl_auto: create
spring.jpa.hibernate.naming_strategy: org.hibernate.cfg.EJB3NamingStrategy

вы пытались установить это конкретное свойство с помощью программных свойств? Или hibernate.properties файл в корне пакета? Или системное свойство JVM? Все описаны здесь.

по моему опыту, иногда трудно диагностировать проблемы спящего режима, если вы настаиваете на том, чтобы не использовать XML (что было бы моим предпочтением). Если ничего не работает, вы можете быть вынуждены определить файл конфигурации по крайней мере.


теперь у меня есть решение.

@EnableAutoConfiguration(exclude={HibernateJpaAuto Configuration.class}) 

JpaAutoConfiguration должен быть исключен. Тем не менее, я думаю, что это может быть ошибка, так как обычно она должна автоматически "отступать", когда я использую свою собственную @Configuration.