![](/img/trans.png)
[英]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.