Автоматическое создание / обновление таблиц с использованием 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();
    }

}
Другие вопросы по тегам