Jeśli nieruchomość hibernate.hbm2ddl.auto
ustawiony create
lub create-drop
następnie najprostszy sposób na to jest poprzez ustawienie hibernate.hbm2ddl.import_files
właściwość SQL nazwę pliku, który zawiera instrukcje SQL, aby załadować danych początkowych do schematu bazy danych, na przykład początkowi użytkownicy aplikacji.
Poniżej znajduje się przykładowa metoda, którą mam w mojej klasie DatabaseConfig
. Ustawia ona właściwość hibernate.hbm2ddl.import_files
o nazwie pliku SQL import_initial_data.sql, która zawiera instrukcje SQL Insert w celu załadowania moich początkowych danych do schematu bazy danych.
@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;
}
To mój AppUser.java
w model
pakiet:
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;
}
}
zależność Maven dla Lombok:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.6</version>
<scope>provided</scope>
</dependency>
import_initial_data.sql plik, który mam w resources
katalogu:
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;
a wynik * select * from appuser; *:
możliwe duplikat [wiosennej inicjalizacji aplikacji internetowych z bazy danych na starcie] (http://stackoverflow.com/questions/ 7082594/Spring-web-application-initialization-from-database-on-startup) –
@Tomasz Nurkiewicz: nie jest duplikatem http://stackoverflow.com/questions/7082594/spring-web-application-initialization- from -bazy danych-na starcie, ponieważ przepływ informacji jest odwrotnie, więc można użyć innych sposobów rozwiązania problemu. – Ralph
Jest bardzo podobny. Mój jest trochę bardziej ogólny. –