我正在使用PostgreSQL和Spring 4,希望我的应用在运行时自动创建数据库。
我的实体类是:
@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; } }
HibernateConfig.java
@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; } }
application.properties
# 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
但是,当我运行SQL访问表User时,将出现错误:表’User’不存在。
如何使Hibernate自动创建数据库?
该物业hibernate.hbm2ddl.auto将为您解决问题。创建SessionFactory时,它将自动验证模式DDL或将其导出到数据库。使用create- drop时,显式关闭SessionFactory时将删除数据库架构。
hibernate.hbm2ddl.auto
Hibernate可以接受上述属性的这些选项。
validate:验证架构,不对数据库进行任何更改。
validate
update:更新架构。
update
create:创建架构,销毁先前的数据。
create
create-drop:在会话结束时删除架构。
create-drop