[英]Hibernate-Spring boot : spring.jpa.hibernate.ddl-auto=update recreates tables and columns after update the entity
[英]Auto create/update Tables using Spring and 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 類關聯的表不是在我的數據庫中自動創建的。
我不添加我的類的例子,因為我認為它在配置中的問題,但請讓我知道是否需要。
您正在數據源上設置包含hibernate.hmb2ddl.auto
的屬性,它對 Hibernate 等 ORM 層一無所知。 您應該將這些屬性傳遞給LocalSessionFactoryBuilder
bean 等。
您可以使用類似的配置來設置具有所需屬性的 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();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.