title: PostgreSQL + Hibernate + Spring auto create database
body: <p>I'm working with PostgreSQL and Spring 4 and want my app auto create database when it running.</p>
  
  <p>My Entity Class is:</p>
  
  <pre><code>@Entity
  @Table(name = "user", schema = "public")
  public class User extends BaseEntity {
  
      private Integer id;
      private String name;
      private Integer contractId;
  
      public User() {
      }
  
      public User(Integer id) {
          super(id);
      }
  
      @Id
      @Column(name = "usr_id", nullable = false)
      @GeneratedValue(strategy= GenerationType.IDENTITY)
      public Integer getId() {
          return id;
      }
  
      public void setId(Integer id) {
          this.id = id;
      }
  
      @Basic
      @Column(name = "usr_name", nullable = true, length = -1)
      public String getName() {
          return name;
      }
  
      public void setName(String name) {
          this.name = name;
      }
  
      @Basic
      @Column(name = "usr_contract_id", nullable = true)
      public Integer getContractId() {
          return contractId;
      }
  
      public void setContractId(Integer contractId) {
          this.contractId = contractId;
      }
  
  }
  </code></pre>
  
  <p>HibernateConfig.java</p>
  
  <pre><code>@Configuration
  @EnableTransactionManagement(proxyTargetClass = true)
  @PropertySources({
      @PropertySource(value = "classpath:application.properties")})
  @ConfigurationProperties(prefix = "spring.datasource")
  public class HibernateConfig {
  
      @Autowired
      private Environment environment;
  
      @Autowired
      private DataSource dataSource;
  
      @Autowired
      private MultiTenantConnectionProvider multiTenantConnectionProvider;
  
      @Autowired
      private CurrentTenantIdentifierResolver currentTenantIdentifierResolver;
  
      public HibernateConfig() {}
  
      @Bean
      public LocalSessionFactoryBean sessionFactory() throws Exception {
  
          LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
          sessionFactory.setDataSource(dataSource);
          sessionFactory.setHibernateProperties(hibernateProperties());
  
          sessionFactory.setPackagesToScan(new String[] {
              "com.xxx.xxx.model",
          });
  
          return sessionFactory;
      }
  
      private Properties hibernateProperties() {
          Properties properties = new Properties();
          properties.put(DIALECT, environment.getRequiredProperty(DIALECT));
          properties.put(SHOW_SQL, environment.getRequiredProperty(SHOW_SQL));
          properties.put(FORMAT_SQL, environment.getRequiredProperty(FORMAT_SQL));
          properties.put(HBM2DDL_AUTO, environment.getRequiredProperty(HBM2DDL_AUTO));
  
          return properties;
      }
  
      @Bean
      @Primary
      @Autowired
      public HibernateTransactionManager transactionManager(SessionFactory s) {
          HibernateTransactionManager txManager = new HibernateTransactionManager();
          txManager.setSessionFactory(s);
          return txManager;
      }
  
      @Bean
      @Autowired
      public HibernateTemplate hibernateTemplate(SessionFactory s) {
          HibernateTemplate hibernateTemplate = new HibernateTemplate(s);
          return hibernateTemplate;
      }
  }
  </code></pre>
  
  <p>application.properties</p>
  
  <pre><code># Database connection settings:
  jdbc.driverClassName=org.postgresql.Driver
  jdbc.url=jdbc:postgresql://localhost:5432/database
  jdbc.username=postgres
  jdbc.password=111111
  
  hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
  hibernate.show_sql=false
  hibernate.format_sql=false
  hibernate.hbm2ddl.auto=update
  
  spring.datasource.initialSize=50
  spring.datasource.maxActive=200
  spring.datasource.maxIdle=200
  spring.datasource.minIdle=50
  </code></pre>
  
  <p>But when I running SQL to access table User, this will appear error: Table 'User' does not exist.</p>
  
  <p>How can I make Hibernate to auto create database?</p>