【问题标题】:Selective Automatic Schema Generation settings per entity in HibernateHibernate 中每个实体的选择性自动模式生成设置
【发布时间】:2020-02-19 08:28:07
【问题描述】:

是否可以选择性地选择 Hibernate 的架构生成设置适用于哪些实体或数据源?

hibernate.hbm2ddl.auto=none

我想使用我不想修改的数据库的现有表,但也会自动创建一些新表。

【问题讨论】:

    标签: hibernate properties entity database-schema


    【解决方案1】:

    您必须使用 ->hibernate.hbm2ddl.auto=update 而不是 none。

    【讨论】:

      【解决方案2】:

      我找到了一篇很好的文章,它描述了如何通过定义多个指向不同实体包的配置类来做到这一点。似乎唯一的方法就是以编程方式进行。

      对于我不想创建或更新任何表的现有数据库表,我将以下配置设置为 hibernate.hbm2ddl.auto 设置为 none

      @PropertySource({"classpath:existing-database.properties"})
      @EnableJpaRepositories(basePackages = "com.project.model.existing")
      @Configuration
      public class ExistingDatabaseConfig {
      
          @Autowired
          private Environment env;
      
          @Bean
          @Primary
          public LocalContainerEntityManagerFactoryBean userEntityManager() {
              LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
              em.setDataSource(userDataSource());
              em.setPackagesToScan("com.project.model.existing");
      
              HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
              em.setJpaVendorAdapter(vendorAdapter);
      
              HashMap<String, Object> properties = new HashMap<>();
              properties.put("hibernate.hbm2ddl.auto", "none");
              properties.put("hibernate.dialect", env.getProperty("hibernate.dialect"));
      
              em.setJpaPropertyMap(properties);
      
              return em;
          }
      
          @Primary
          @Bean
          public DataSource userDataSource() {
      
              DriverManagerDataSource dataSource
                      = new DriverManagerDataSource();
              dataSource.setDriverClassName(env.getProperty("jdbc.driverClassName"));
              dataSource.setUrl(env.getProperty("user.jdbc.url"));
              dataSource.setUsername(env.getProperty("jdbc.user"));
              dataSource.setPassword(env.getProperty("jdbc.pass"));
      
              return dataSource;
          }
      
      }
      

      对于那些应该创建表的实体,我将有一个单独的配置,将 hibernate.hbm2ddl.auto 设置为 create-or-update: p>

      @PropertySource({"classpath:not-existing-database.properties"})
      @EnableJpaRepositories(basePackages = "com.project.model.notexisting")
      @Configuration
      public class NotExistingDatabaseConfig {
      
          @Autowired
          private Environment env;
      
          @Bean
          @Primary
          public LocalContainerEntityManagerFactoryBean userEntityManager() {
              LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
              em.setDataSource(userDataSource());
              em.setPackagesToScan("com.project.model.notexisting");
      
              HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
              em.setJpaVendorAdapter(vendorAdapter);
      
              HashMap<String, Object> properties = new HashMap<>();
              properties.put("hibernate.hbm2ddl.auto", "create-or-update");
              properties.put("hibernate.dialect", env.getProperty("hibernate.dialect"));
      
              em.setJpaPropertyMap(properties);
      
              return em;
          }
      
          @Primary
          @Bean
          public DataSource userDataSource() {
      
              DriverManagerDataSource dataSource
                      = new DriverManagerDataSource();
              dataSource.setDriverClassName(env.getProperty("jdbc.driverClassName"));
              dataSource.setUrl(env.getProperty("user.jdbc.url"));
              dataSource.setUsername(env.getProperty("jdbc.user"));
              dataSource.setPassword(env.getProperty("jdbc.pass"));
      
              return dataSource;
          }
      
      }
      

      【讨论】:

      • 您可以在 persistence.xml 文件中执行此操作,定义两个持久性单元。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-11
      • 2016-02-12
      • 1970-01-01
      • 2012-02-24
      • 1970-01-01
      • 1970-01-01
      • 2015-12-06
      相关资源
      最近更新 更多