我正在尝试配置Spring Boot / Data以在应用初始化时重新创建表。 为此,我将ddl-auto配置为创建。我正在使用两个数据源。
当表不存在时,将创建它们。但是,如果存在表,则不会重新创建它们。我认为ddl-auto create(“创建模式,破坏先前的数据。”)将始终重新创建表。
application.yaml
num[5]
我的配置文件:
spring:
profiles: spring
jpa:
generate-ddl: true
hibernate:
ddl-auto: create
show-sql: true
properties:
hibernate:
dialect: org.hibernate.dialect.MySQL5InnoDBDialect
format_sql: true
dba:
datasource:
url: jdbc:mysql://localhost:3306/DBA
username: root
password: 123
driver-class-name: com.mysql.cj.jdbc.Driver
dbb:
datasource:
url: jdbc:mysql://localhost:3306/DBB
username: root
password: 123
driver-class-name: com.mysql.cj.jdbc.Driver
DBAConfig.java
@SpringBootApplication
@ComponentScan( basePackages = {"com.example.mds"} )
public class EMdsApplication {
public static void main(String[] args) {
SpringApplication.run(EMdsApplication.class, args);
}
}
DBBConfig.java
@Configuration
@EntityScan(basePackages = {"com.example.mds.model"} )
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef = "dba_emf",
transactionManagerRef = "dba_tm",
basePackages = {"com.example.mds.repository"}
)
public class DBAConfig {
@Primary
@Bean(name = "dba_ds")
@ConfigurationProperties(prefix = "dba.datasource")
public DataSource dataSource(@Qualifier("dba_dsp") DataSourceProperties properties) {
return properties.initializeDataSourceBuilder().type(HikariDataSource.class).build();
}
@Primary
@Bean(name = "dba_emf")
public LocalContainerEntityManagerFactoryBean entityManagerFactory(EntityManagerFactoryBuilder builder, @Qualifier("dba_ds") DataSource datasource) {
return builder
.dataSource(datasource)
.packages("com.example.mds.model")
.persistenceUnit("dba_pu")
.build();
}
@Primary
@Bean(name = "dba_tm")
public PlatformTransactionManager transactionManager(@Qualifier("dba_emf") EntityManagerFactory entityManagerFactory) {
return new JpaTransactionManager(entityManagerFactory);
}
@Primary
@Bean(name = "dba_dsp")
@ConfigurationProperties(prefix = "dba.datasource")
public DataSourceProperties dataSourceProperties() {
return new DataSourceProperties();
}
}
答案 0 :(得分:1)
如果要删除和创建表,则需要使用create-drop
属性。这仅应用于测试目的,不能用于生产。
有关详细信息,请参见this问题
答案 1 :(得分:1)
在error: invalid use of non-static member function ‘AStruct MainClass::Func1(const OtherClass1&)’
43 | AStruct v1 = Func(Func1, BS.vOC1);
中更改application.yaml
。
在应用程序关闭时关闭会话工厂时,它将删除该架构,并在应用程序启动时创建新的架构。
答案 2 :(得分:0)
在application.yaml
中更改ddl-auto: create to ddl-auto: update
。
答案 3 :(得分:0)
从我所理解的问题是,您只想在已存在的schme上对其进行更新。但是在您当前的配置下,仅当表不存在时才被创建。已经存在。
请注意确保您仅将此属性用于测试场景或用于开发目的。请确保在生产环境中将ddl-auto
设置为none
。< / p>
尝试如下设置application.yml
:
spring:
profiles: spring
jpa:
generate-ddl: true
hibernate:
ddl-auto: update
ddl-auto的可能值为:
validate:验证架构,不对数据库进行任何更改。
更新:更新架构。
create:创建模式,销毁先前的数据。
create-drop:在会话结束时删除架构。
update
操作将查询JDBC驱动程序的API以获取数据库元数据,然后Hibernate根据读取您的带注释的类或HBM XML映射比较它创建的对象模型,并尝试在其上调整架构。飞。
相关文章:How does spring.jpa.hibernate.ddl-auto property exactly work in Spring?