java - 如何在spring boot中从实体自动生成表到shema
问题描述
我有一个带有一个实体的 Spring Boot 应用程序。我生成了一个 mysql 模式,现在我试图在我的 Spring Boot 应用程序启动时在其中生成一个表,我尝试使用自定义配置类进行此操作,但它没有生成任何表。
配置类:
@Configuration
@PropertySource({"classpath:persistence-multiple-db.properties"})
@EnableJpaRepositories(
basePackages = "com.cbc.coorporateblinddateservice.repositories.meetinsSetting",
entityManagerFactoryRef = "meetingSettingEntityManager",
transactionManagerRef = "meetingSettingTransactionManager"
)
public class MeetingSettingsConfig {
@Autowired
private Environment env;
@Bean
@Primary
public LocalContainerEntityManagerFactoryBean meetingSettingEntityManager() {
LocalContainerEntityManagerFactoryBean em
= new LocalContainerEntityManagerFactoryBean();
em.setDataSource(meetingSettingDataSource());
em.setPackagesToScan(
"com.cbc.coorporateblinddateservice.entities.meetinsSetting");
HibernateJpaVendorAdapter vendorAdapter
= new HibernateJpaVendorAdapter();
em.setJpaVendorAdapter(vendorAdapter);
HashMap<String, Object> properties = new HashMap<>();
properties.put("hibernate.hbm2ddl.auto",
env.getProperty("hibernate.hbm2ddl.auto"));
properties.put("hibernate.dialect",
env.getProperty("hibernate.dialect"));
em.setJpaPropertyMap(properties);
return em;
}
@Primary
@Bean
public DataSource meetingSettingDataSource() {
DriverManagerDataSource dataSource
= new DriverManagerDataSource();
dataSource.setDriverClassName(
env.getProperty("meetingSetting.jdbc.driverClassName"));
dataSource.setUrl(env.getProperty("meetingSetting.jdbc.url"));
dataSource.setUsername(env.getProperty("meetingSetting.jdbc.user"));
dataSource.setPassword(env.getProperty("meetingSetting.jdbc.pass"));
dataSource.setSchema("coorporate_blinddate");
return dataSource;
}
@Primary
@Bean
public PlatformTransactionManager meetingSettingTransactionManager() {
JpaTransactionManager transactionManager
= new JpaTransactionManager();
transactionManager.setEntityManagerFactory(
meetingSettingEntityManager().getObject());
return transactionManager;
}
}
实体:
@Entity
@Table(name = "MeetingsSetting")
public class MeetingsSetting {
@Id
@GeneratedValue
private Long id;
@Column(name = "meeting_name")
private String meetingName;
@Column(name = "meeting_url")
private String meetingUrl;
@Column(name = "meeting_pw")
private String meetingPw;
//
// @OneToMany(mappedBy = "meetingsSetting", cascade = CascadeType.ALL)
// private List<Date> meetingDate = new ArrayList<>();
}
最后是我的 config.property:
meetingSetting.jdbc.driverClassName=com.mysql.jdbc.Driver
meetingSetting.jdbc.url=jdbc:mysql://localhost:3306/Coorporate_Blinddate?createDatabaseIfNotExist=true&useSSL=true&serverTimezone=UTC
meetingSetting.jdbc.user=root
meetingSetting.jdbc.pass=
我知道它需要我的 config.property 因为如果我输入错误的用户它会给我一个错误。但是知道我想直接从我的实体类生成表。
解决方案
spring.jpa.hibernate.ddl-auto=在 application.properties 文件中创建,这需要项目中的 Spring JPA
推荐阅读
- r - 按组划分的两个日期之间的平均值
- reactjs - 如何在 React 测试库/Jest 中测试按钮是否有条件启用
- javascript - API请求后如何正确发送电子邮件?
- selenium-webdriver - 即使任何一个子节点失败,测试也通过(在扩展报告中)
- r - 如何在 geom_text 粘贴命令中使用 `parse = T` 和类似 round 的函数?
- android - 您如何在您的 Android 应用程序中捆绑一组特定的表情符号?(如 Discord 或 Facebook)
- sql-server - 如何在 Angular 模板中显示 SQL Server 图像(blob 图像)?
- android - android.icu.text.DecimalFormat 重置货币分隔符
- typescript - 如何在我的 nx 工作区中覆盖 eslint 规则?
- visual-studio-2019 - 如何强制 Visual Studio 2019 生成 .csproj.user 文件?