首页 > 解决方案 > 如何在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 因为如果我输入错误的用户它会给我一个错误。但是知道我想直接从我的实体类生成表。

标签: javaspringspring-boot

解决方案


spring.jpa.hibernate.ddl-auto=在 application.properties 文件中创建,这需要项目中的 Spring JPA


推荐阅读