Si ha establecido su propiedad hibernate.hbm2ddl.auto
a create
o create-drop
entonces la manera más fácil de hacer esto es mediante el establecimiento de hibernate.hbm2ddl.import_files
propiedad con el nombre del archivo SQL que contiene sentencias SQL para cargar los datos iniciales en el esquema de la base, por ejemplo, usuarios iniciales de la aplicación.
El siguiente es un método de ejemplo que tengo en mi clase DatabaseConfig
. Establece la propiedad hibernate.hbm2ddl.import_files
con el nombre de archivo SQL import_initial_data.sql que contiene instrucciones SQL Insert para cargar mis datos iniciales en el esquema de la base de datos.
@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;
}
Este es mi paquete AppUser.java
en model
:
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;
}
}
Maven dependencia para Lombok:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.6</version>
<scope>provided</scope>
</dependency>
El archivo import_initial_data.sql que tengo en resources
directorio:
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;
Y el resultado de SELECT * * FROM appuser; *:

posible duplicado de [inicialización de la aplicación web surgen de la base de datos en el arranque] (http://stackoverflow.com/questions/ 7082594/spring-web-application-initialization-from-database-on-startup) –
@Tomasz Nurkiewicz: no es un duplicado de http://stackoverflow.com/questions/7082594/spring-web-application-initialization-from -database-on-startup, porque el flujo de información es al revés, por lo que se podrían utilizar otras formas de resolver el problema. – Ralph
Es muy similar. El mío es un poco más genérico. –