Jeśli uruchomić skrypt w ten sposób ...
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd">
<jdbc:embedded-database id="dataSource" type="H2" >
<jdbc:script location="classpath:my.sql" />
</jdbc:embedded-database>
... to jest wykonywane przed jego inicjalizacji Hibernate robi rzeczy.
Przetestowałem to jeszcze raz, specjalnie dla Ciebie. Jest uruchamiany, zanim Hibernate utworzy tabele. Zobacz ten dziennik (uruchomiony skrypt jest w ciągu pierwszych 3 linie, Hibernate w tych ostatnich):
2011-11-01 19:10:08,380 [main] INFO org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseFactory - Creating embedded database 'dataSource'
2011-11-01 19:10:08,583 [main] INFO org.springframework.jdbc.datasource.init.ResourceDatabasePopulator - Executing SQL script from class path resource [my.sql]
2011-11-01 19:10:08,683 [main] INFO org.springframework.jdbc.datasource.init.ResourceDatabasePopulator - Done executing SQL script from class path resource [my.sql] in 100 ms.
2011-11-01 19:10:08,683 [main] INFO org.springframework.context.support.GenericApplicationContext - Bean 'dataSource' of type [class org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseFactoryBean] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2011-11-01 19:10:08,683 [main] INFO org.springframework.context.support.GenericApplicationContext - Bean 'dataSource' of type [class org.springframework.jdbc.datasource.SimpleDriverDataSource] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2011-11-01 19:10:08,700 [main] INFO org.springframework.context.support.GenericApplicationContext - Bean 'org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter#35712651' of type [class org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2011-11-01 19:10:08,717 [main] INFO org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean - Building JPA container EntityManagerFactory for persistence unit 'testH2DbPersistenceUnit'
2011-11-01 19:10:08,854 [main] INFO org.hibernate.annotations.common.Version - Hibernate Commons Annotations 3.2.0.Final
2011-11-01 19:10:08,859 [main] INFO org.hibernate.cfg.Environment - Hibernate 3.6.7.Final
2011-11-01 19:10:08,861 [main] INFO org.hibernate.cfg.Environment - hibernate.properties not found
...
2011-11-01 19:10:10,313 [main] INFO org.hibernate.tool.hbm2ddl.SchemaUpdate - Running hbm2ddl schema update
2011-11-01 19:10:10,313 [main] INFO org.hibernate.tool.hbm2ddl.SchemaUpdate - fetching database metadata
2011-11-01 19:10:10,315 [main] INFO org.hibernate.tool.hbm2ddl.SchemaUpdate - updating schema
Występuje po zakończeniu wszystkich czynności. Zła odpowiedź. Przepraszam. Ale jest bardzo fajnie ... – markthegrea
@markthegrea: Dziwne, kiedy go wypróbuję, robi się, zanim hibernacja stworzy tabele. Aby to udowodnić, dołączyłem dzienniki. Więc twój problem musi być czymś innym. -- Poprawna odpowiedź. – Ralph
Ralph, rozgryzłem to. Wprowadzałem kod, który mi dałeś PO utworzeniu źródła danych. Trochę czasu zajęło mi pozyskanie Spring logging, ale lokalizacja zdecydowanie zrobiła różnicę. Jeśli umieścisz go PRZED źródłem xml, działa tak jak w reklamie. Nie zdawałem sobie sprawy, że rozkaz przyniósł zmianę na wiosnę. Ponadto, Spring wydaje się domyślnie "jdbc: hsqldb: mem: testdb", konkretnie "testdb". Nazwałam moje inaczej, a Spring uruchamiał "testdb" w pamięci. Kiedy zmieniłem moje na "testdb", bingo, wszystko działało dobrze. Dzięki! – markthegrea