0
전개 후 초기화하려는 내장 데이터베이스 (HSQLDB)가있는 스프링 MVC 애플리케이션이 있습니다. JPA + Hibernate를 사용하고있는 동안 Java 코드를 사용하고자 할 때 xml 스크립트를 사용하여 데이터 소스의 초기 데이터를 정의 할 수 있다는 것을 알고 있습니다. 이것을 할 수있는 방법이 있습니까?배포 후 Spring 임베디드 데이터베이스 초기화
전개 후 초기화하려는 내장 데이터베이스 (HSQLDB)가있는 스프링 MVC 애플리케이션이 있습니다. JPA + Hibernate를 사용하고있는 동안 Java 코드를 사용하고자 할 때 xml 스크립트를 사용하여 데이터 소스의 초기 데이터를 정의 할 수 있다는 것을 알고 있습니다. 이것을 할 수있는 방법이 있습니까?배포 후 Spring 임베디드 데이터베이스 초기화
심하게 업데이트 대답 (그 전에 너무 복잡) :
당신이 필요로하는 모든 데이터베이스에 필요한 모든 데이터를 삽입됩니다 문맥에 초기화 콩을 추가하는 것입니다:
public class MockDataPopulator {
private static boolean populated = false;
@Autowired
private SessionFactory sessionFactory;
@PostConstruct
public void populateDatabase() {
// Prevent duplicate initialization as HSQL is also initialized only once. Duplicate executions
// can happen when the application context is reloaded - e.g. when running unit tests).
if (populated) {
return;
}
// Create new persistence session
Session session = sessionFactory.openSession();
session.setFlushMode(FlushMode.ALWAYS);
// Insert mock entities
session.merge(MockDataFactory.createMyFirstObject())
session.merge(MockDataFactory.createMySeconfObject())
// ...
// Flush and close
session.flush();
session.close();
// Set initialization flag
populated = true;
}
}
와우, 너무 많은 레코드를 추가 할 수 있습니다. 나는 Spring이 ServletContextListener와 비슷한 것을 가지고 있다고 생각했다. 어쨌든 큰 반향을 가져 주셔서 감사합니다. –
음, 너무 많지 않습니다. 아마 너무 복잡 해 보였을거야. 필요한 것은 데이터를 초기화 할 하나의'InitializingBean' (또는'@ PostConstruct'로 bean)을 만드는 것뿐입니다. 우리는 우리의 애플리케이션에서 즉석에서 데이터베이스 스키마를 생성 중입니다 ... 그것은 위의 복잡성의 일부입니다. 어쩌면 나는 물건을 간단하게 유지하기 위해 내 대답을 다시 써야한다. –
Ok ... 우리 응용 프로그램에서 복사하여 붙여 넣기 코드를 제거하고 가장 간단한 예제를 작성했습니다. 이전의 복잡한 엉망으로 미안 해요 :). –