Автоматическое создание / обновление таблиц с использованием Spring и Hibernate
У меня есть приложение на основе Spring + Hibernate, где большинство свойств устанавливаются с помощью аннотаций.
Мой класс AppConfig выглядит так:
//package declarations and imports
@EnableWebMvc
@Configuration
@ComponentScan({ "com.package.subpackage.*" })
@Import({ SecurityConfig.class })
public class AppConfig {
@Bean(name = "dataSource")
public DriverManagerDataSource dataSource() {
DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource();
driverManagerDataSource.setDriverClassName("com.mysql.jdbc.Driver");
driverManagerDataSource.setUrl("jdbc:mysql://localhost:3306/fur");
Properties prop = new Properties();
prop.setProperty("hibernate.hbm2ddl.auto", "create");
driverManagerDataSource.setConnectionProperties(prop);
driverManagerDataSource.setUsername("root");
driverManagerDataSource.setPassword("");
return driverManagerDataSource;
}
//other methods...
}
У меня проблема в том, что таблицы, связанные с моими классами Java, не создаются автоматически в моей базе данных.
Я не добавляю примеры моего класса, потому что я думаю, что проблема в конфигурации, но, пожалуйста, дайте мне знать, если это необходимо.
1 ответ
Решение
Вы устанавливаете свойства, содержащие hibernate.hmb2ddl.auto
в источнике данных, который ничего не знает о слое ORM, таком как Hibernate. Вы должны передать эти свойства LocalSessionFactoryBuilder
боб или такой.
Вы можете использовать аналогичную конфигурацию для настройки Hibernate с необходимыми свойствами:
@Configuration
public class DatabaseConfig {
// Data source, transaction manager, ... bean definitions omitted
@Bean
public LocalSessionFactoryBuilder sessionFactoryBuilder() {
LocalSessionFactoryBuilder sfb = new LocalSessionFactoryBuilder(dataSource());
sfb.scanPackages("com.example.app.model");
// Hibernate/JPA properties
Properties properties = new Properties();
properties.put("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");
properties.put("hibernate.hbm2ddl.auto", "create");
sfb.addProperties(properties);
return sfb;
}
@Bean
public SessionFactory sessionFactory() {
return sessionFactoryBuilder().buildSessionFactory();
}
}