如果您将hibernate.hbm2ddl.auto 属性设置为create 或create-drop,那么最简单的方法是使用包含SQL 语句的SQL 文件名设置hibernate.hbm2ddl.import_files 属性,以将初始数据加载到数据库中架构,例如初始应用程序用户。
以下是我在DatabaseConfig 类中的示例方法。它使用 SQL 文件名 import_initial_data.sql 设置 hibernate.hbm2ddl.import_files 属性,其中包含 SQL 插入语句以将我的初始数据加载到数据库架构中。
@Bean
public LocalSessionFactoryBean hibernate5SessionFactoryBean(){
LocalSessionFactoryBean localSessionFactoryBean = new LocalSessionFactoryBean();
localSessionFactoryBean.setDataSource((DataSource) appContext.getBean("DataSource"));
localSessionFactoryBean.setAnnotatedClasses( AppUser.class );
Properties properties = new Properties();
properties.put( "hibernate.dialect", "org.hibernate.dialect.PostgreSQLDialect");
properties.put("hibernate.hbm2ddl.auto","create-drop");
properties.put("hibernate.hbm2ddl.import_files", "import_initial_data.sql");
properties.put("hibernate.show_sql","true");
localSessionFactoryBean.setHibernateProperties(properties);
return localSessionFactoryBean;
}
这是我在model 包中的AppUser.java:
package com.beniregev.model;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import javax.persistence.*;
@Entity
@NoArgsConstructor(access = AccessLevel.PUBLIC)
@AllArgsConstructor(access = AccessLevel.PUBLIC)
public class AppUser {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(nullable = false, unique = true)
private String userName;
@Column(nullable = false)
private String password;
public AppUser(String userName, String password) {
this.userName = userName;
this.password = password;
}
}
lombok 的 Maven 依赖项:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.6</version>
<scope>provided</scope>
</dependency>
我在resources 目录中的import_initial_data.sql 文件:
INSERT INTO appuser(username, password) VALUES ('jesus', 'christ');
INSERT INTO appuser(username, password) VALUES ('mary', 'virgin');
INSERT INTO appuser(username, password) VALUES ('josef', 'who?');
INSERT INTO appuser(username, password) VALUES ('jeremaia', 'profet');
COMMIT;
以及*SELECT * FROM appuser;*的结果: