2015-07-20 44 views
0

我正在使用Spring Boot 1.2.5並且想要做一些JUnit4測試。我有一個包含測試的Eclipse項目。在初始化過程中,創建一個臨時H2數據庫。我有一個schema.xml和data.xml。初始化很好,但後來有三個表是空的。spring引導tempory h2數據庫表空junit4測試

首先,我有通過Spring啓動創建的數據庫。我身邊沒有代碼,只是資源文件夾中的XML。這運行沒有任何問題。然後我發現在測試中,五張桌子中的三張是空的。該架構仍然存在,但不包含數據。

然後我更改爲手動創建H2數據庫/數據源bean,並在同一個方法中檢查是否存在所有記錄。這在測試結果中沒有任何區別。我只能在創建數據庫後按照預期填充數據。看來,在bean創建和JUnit測試期間,一些例程正在對三個特定的表進行刪除。

package de.unit4.financials; 

import javax.sql.DataSource; 
import org.springframework.boot.autoconfigure.SpringBootApplication; 
import org.springframework.context.annotation.Bean; 
import org.springframework.jdbc.core.JdbcTemplate; 
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder; 
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType; 
import org.springframework.test.jdbc.JdbcTestUtils; 


@SpringBootApplication 
public class JUnitConfig { 

Logger logger = LogManager.getLogger(); 


@Bean 
public DataSource getDataSource() { 
    DataSource dataSource = null; 
    if (dataSource == null) { 
     dataSource = new EmbeddedDatabaseBuilder().setType(EmbeddedDatabaseType.H2).setName("FanUtilDB") 
       .addScript("classpath:schema.sql").addScript("classpath:data.sql").build(); 
    } 
    logger.info("Datasource "+dataSource); 
    testDB(new JdbcTemplate(dataSource)); 
    return dataSource; 
} 

public void testDB(JdbcTemplate jdbcTemplate) { 
    countTableRows("oas_company", jdbcTemplate); 
    countTableRows("oas_agm", jdbcTemplate); 
    countTableRows("oas_agmlist", jdbcTemplate); 
    countTableRows("com_usr", jdbcTemplate); 
    countTableRows("com_capab", jdbcTemplate); 
} 

private void countTableRows(String name, JdbcTemplate jdbcTemplate) { 
     int anzahl = JdbcTestUtils.countRowsInTable(jdbcTemplate, name); 
     logger.info(name + " = " + anzahl); 
    } 
} 

這是輸出:

08:58:16.007 [main] INFO Datasource org.springframework.jdbc.data[email protected]60094a13 || de.unit4.financials.JUnitConfig getDataSource 54 
08:58:16.197 [main] INFO oas_company = 28 || de.unit4.financials.JUnitConfig countTableRows 74 
08:58:16.199 [main] INFO oas_agm = 2 || de.unit4.financials.JUnitConfig countTableRows 74 
08:58:16.201 [main] INFO oas_agmlist = 2 || de.unit4.financials.JUnitConfig countTableRows 74 
08:58:16.203 [main] INFO com_usr = 52 || de.unit4.financials.JUnitConfig countTableRows 74 
08:58:16.205 [main] INFO com_capab = 17 || de.unit4.financials.JUnitConfig countTableRows 74 

後來JUnit測試運行,並給了我這樣的結果:

08:58:19.099 [main] INFO Datasource org.springframework.jdbc.data[email protected]60094a13 || de.unit4.financials.periods.CurrentPeriodDBFactory getCurrentPeriod 63 
08:58:19.127 [main] INFO oas_company = 0 || de.unit4.financials.FinancialsUtilApplicationTests countTableRows 40 
08:58:19.128 [main] INFO oas_agm = 0 || de.unit4.financials.FinancialsUtilApplicationTests countTableRows 40 
08:58:19.128 [main] INFO oas_agmlist = 0 || de.unit4.financials.FinancialsUtilApplicationTests countTableRows 40 
08:58:19.129 [main] INFO com_usr = 52 || de.unit4.financials.FinancialsUtilApplicationTests countTableRows 40 
08:58:19.130 [main] INFO com_capab = 17 || de.unit4.financials.FinancialsUtilApplicationTests countTableRows 40 

DataSource對象似乎是一樣的,但記錄數量不同。在測試中,前三個是空的。

下面是測試:

package de.unit4.financials; 

import org.apache.logging.log4j.LogManager; 
import org.apache.logging.log4j.Logger; 
import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.boot.test.SpringApplicationConfiguration; 
import org.springframework.jdbc.core.JdbcTemplate; 
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 
import org.springframework.test.jdbc.JdbcTestUtils; 

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(classes = JUnitConfig.class) 
public class FinancialsUtilApplicationTests { 

    static Logger logger = LogManager.getLogger(); 

    @Autowired 
    JdbcTemplate jdbcTemplate; 

    @Test 
    public void contextLoads() { 
    } 

    @Test 
    public void testDB() { 
     countTableRows("oas_company"); 
     countTableRows("oas_agm"); 
     countTableRows("oas_agmlist"); 
     countTableRows("com_usr"); 
     countTableRows("com_capab"); 
    } 

    /** 
    * @param name 
    */ 
    private void countTableRows(String name) { 
     int anzahl = JdbcTestUtils.countRowsInTable(jdbcTemplate, name); 
     logger.info(name + " = " + anzahl); 
    } 
} 

以下是完整的控制檯輸出:

08:58:12.555 [main] DEBUG o.s.t.c.j.SpringJUnit4ClassRunner - SpringJUnit4ClassRunner constructor called with [class de.unit4.financials.periods.PeriodRangeTest]. 
08:58:12.581 [main] DEBUG o.s.test.context.BootstrapUtils - Instantiating TestContextBootstrapper from class [org.springframework.test.context.support.DefaultTestContextBootstrapper] 
08:58:12.607 [main] DEBUG o.s.t.c.s.DefaultTestContextBootstrapper - Found explicit ContextLoader class [org.springframework.boot.test.SpringApplicationContextLoader] for context configuration attributes [[email protected] declaringClass = 'de.unit4.financials.periods.PeriodRangeTest', classes = '{class de.unit4.financials.JUnitConfig}', locations = '{}', inheritLocations = true, initializers = '{}', inheritInitializers = true, name = [null], contextLoaderClass = 'org.springframework.boot.test.SpringApplicationContextLoader'] 
08:58:12.618 [main] DEBUG o.s.t.c.support.ActiveProfilesUtils - Could not find an 'annotation declaring class' for annotation type [org.springframework.test.context.ActiveProfiles] and class [de.unit4.financials.periods.PeriodRangeTest] 
08:58:12.627 [main] DEBUG o.s.t.c.s.DefaultTestContextBootstrapper - @TestExecutionListeners is not present for class [de.unit4.financials.periods.PeriodRangeTest]: using defaults. 
08:58:12.644 [main] INFO o.s.t.c.s.DefaultTestContextBootstrapper - Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener] 
08:58:12.672 [main] INFO o.s.t.c.s.DefaultTestContextBootstrapper - Could not instantiate TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener]. Specify custom listener classes or make the default listener classes (and their required dependencies) available. Offending class: [javax/servlet/ServletContext] 
08:58:12.688 [main] INFO o.s.t.c.s.DefaultTestContextBootstrapper - Using TestExecutionListeners: [org.springframewor[email protected]73ad2d6, org.springfra[email protected]7085bdee, org.springframew[email protected]1ce92674, org.sp[email protected]5700d6b1] 
08:58:12.692 [main] DEBUG o.s.t.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [de.unit4.financials.periods.PeriodRangeTest] 
08:58:12.694 [main] DEBUG o.s.t.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [de.unit4.financials.periods.PeriodRangeTest] 
08:58:12.718 [main] DEBUG o.s.t.c.j.SpringJUnit4ClassRunner - SpringJUnit4ClassRunner constructor called with [class de.unit4.financials.periods.CurrentPeriodDBFactoryTest]. 
08:58:12.718 [main] DEBUG o.s.test.context.BootstrapUtils - Instantiating TestContextBootstrapper from class [org.springframework.test.context.support.DefaultTestContextBootstrapper] 
08:58:12.720 [main] DEBUG o.s.t.c.s.DefaultTestContextBootstrapper - Found explicit ContextLoader class [org.springframework.boot.test.SpringApplicationContextLoader] for context configuration attributes [[email protected] declaringClass = 'de.unit4.financials.periods.CurrentPeriodDBFactoryTest', classes = '{class de.unit4.financials.JUnitConfig}', locations = '{}', inheritLocations = true, initializers = '{}', inheritInitializers = true, name = [null], contextLoaderClass = 'org.springframework.boot.test.SpringApplicationContextLoader'] 
08:58:12.721 [main] DEBUG o.s.t.c.support.ActiveProfilesUtils - Could not find an 'annotation declaring class' for annotation type [org.springframework.test.context.ActiveProfiles] and class [de.unit4.financials.periods.CurrentPeriodDBFactoryTest] 
08:58:12.722 [main] DEBUG o.s.t.c.s.DefaultTestContextBootstrapper - @TestExecutionListeners is not present for class [de.unit4.financials.periods.CurrentPeriodDBFactoryTest]: using defaults. 
08:58:12.727 [main] INFO o.s.t.c.s.DefaultTestContextBootstrapper - Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener] 
08:58:12.729 [main] INFO o.s.t.c.s.DefaultTestContextBootstrapper - Could not instantiate TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener]. Specify custom listener classes or make the default listener classes (and their required dependencies) available. Offending class: [javax/servlet/ServletContext] 
08:58:12.729 [main] INFO o.s.t.c.s.DefaultTestContextBootstrapper - Using TestExecutionListeners: [org.springframewor[email protected]2d928643, org.springfra[email protected]5025a98f, org.springframew[email protected]49993335, org.sp[email protected]20322d26] 
08:58:12.729 [main] DEBUG o.s.t.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [de.unit4.financials.periods.CurrentPeriodDBFactoryTest] 
08:58:12.730 [main] DEBUG o.s.t.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [de.unit4.financials.periods.CurrentPeriodDBFactoryTest] 
08:58:12.733 [main] DEBUG o.s.t.c.j.SpringJUnit4ClassRunner - SpringJUnit4ClassRunner constructor called with [class de.unit4.financials.periods.PeriodTest]. 
08:58:12.734 [main] DEBUG o.s.test.context.BootstrapUtils - Instantiating TestContextBootstrapper from class [org.springframework.test.context.support.DefaultTestContextBootstrapper] 
08:58:12.736 [main] DEBUG o.s.t.c.s.DefaultTestContextBootstrapper - Found explicit ContextLoader class [org.springframework.boot.test.SpringApplicationContextLoader] for context configuration attributes [[email protected] declaringClass = 'de.unit4.financials.periods.PeriodTest', classes = '{class de.unit4.financials.JUnitConfig}', locations = '{}', inheritLocations = true, initializers = '{}', inheritInitializers = true, name = [null], contextLoaderClass = 'org.springframework.boot.test.SpringApplicationContextLoader'] 
08:58:12.737 [main] DEBUG o.s.t.c.support.ActiveProfilesUtils - Could not find an 'annotation declaring class' for annotation type [org.springframework.test.context.ActiveProfiles] and class [de.unit4.financials.periods.PeriodTest] 
08:58:12.738 [main] DEBUG o.s.t.c.s.DefaultTestContextBootstrapper - @TestExecutionListeners is not present for class [de.unit4.financials.periods.PeriodTest]: using defaults. 
08:58:12.743 [main] INFO o.s.t.c.s.DefaultTestContextBootstrapper - Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener] 
08:58:12.744 [main] INFO o.s.t.c.s.DefaultTestContextBootstrapper - Could not instantiate TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener]. Specify custom listener classes or make the default listener classes (and their required dependencies) available. Offending class: [javax/servlet/ServletContext] 
08:58:12.745 [main] INFO o.s.t.c.s.DefaultTestContextBootstrapper - Using TestExecutionListeners: [org.springframewor[email protected]544fe44c, org.springfra[email protected]31610302, org.springframew[email protected]71318ec4, org.sp[email protected]21213b92] 
08:58:12.745 [main] DEBUG o.s.t.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [de.unit4.financials.periods.PeriodTest] 
08:58:12.745 [main] DEBUG o.s.t.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [de.unit4.financials.periods.PeriodTest] 
08:58:12.752 [main] DEBUG o.s.t.c.j.SpringJUnit4ClassRunner - SpringJUnit4ClassRunner constructor called with [class de.unit4.financials.FinancialsUtilApplicationTests]. 
08:58:12.753 [main] DEBUG o.s.test.context.BootstrapUtils - Instantiating TestContextBootstrapper from class [org.springframework.test.context.support.DefaultTestContextBootstrapper] 
08:58:12.762 [main] DEBUG o.s.t.c.s.DefaultTestContextBootstrapper - Found explicit ContextLoader class [org.springframework.boot.test.SpringApplicationContextLoader] for context configuration attributes [[email protected] declaringClass = 'de.unit4.financials.FinancialsUtilApplicationTests', classes = '{class de.unit4.financials.JUnitConfig}', locations = '{}', inheritLocations = true, initializers = '{}', inheritInitializers = true, name = [null], contextLoaderClass = 'org.springframework.boot.test.SpringApplicationContextLoader'] 
08:58:12.762 [main] DEBUG o.s.t.c.support.ActiveProfilesUtils - Could not find an 'annotation declaring class' for annotation type [org.springframework.test.context.ActiveProfiles] and class [de.unit4.financials.FinancialsUtilApplicationTests] 
08:58:12.763 [main] DEBUG o.s.t.c.s.DefaultTestContextBootstrapper - @TestExecutionListeners is not present for class [de.unit4.financials.FinancialsUtilApplicationTests]: using defaults. 
08:58:12.769 [main] INFO o.s.t.c.s.DefaultTestContextBootstrapper - Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener] 
08:58:12.770 [main] INFO o.s.t.c.s.DefaultTestContextBootstrapper - Could not instantiate TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener]. Specify custom listener classes or make the default listener classes (and their required dependencies) available. Offending class: [javax/servlet/ServletContext] 
08:58:12.770 [main] INFO o.s.t.c.s.DefaultTestContextBootstrapper - Using TestExecutionListeners: [org.springframewor[email protected]335eadca, org.springfra[email protected]210366b4, org.springframew[email protected]eec5a4a, org.sp[email protected]2b2948e2] 
08:58:12.770 [main] DEBUG o.s.t.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [de.unit4.financials.FinancialsUtilApplicationTests] 
08:58:12.770 [main] DEBUG o.s.t.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [de.unit4.financials.FinancialsUtilApplicationTests] 
08:58:12.786 [main] DEBUG o.s.t.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [de.unit4.financials.periods.PeriodRangeTest] 
08:58:12.787 [main] DEBUG o.s.t.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [de.unit4.financials.periods.PeriodRangeTest] 
08:58:12.788 [main] DEBUG o.s.t.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [de.unit4.financials.periods.PeriodRangeTest] 
08:58:12.789 [main] DEBUG o.s.t.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [de.unit4.financials.periods.PeriodRangeTest] 
08:58:12.790 [main] DEBUG o.s.t.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [de.unit4.financials.periods.PeriodRangeTest] 
08:58:12.790 [main] DEBUG o.s.t.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [de.unit4.financials.periods.PeriodRangeTest] 
08:58:12.793 [main] DEBUG o.s.t.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [de.unit4.financials.periods.PeriodRangeTest] 
08:58:12.793 [main] DEBUG o.s.t.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [de.unit4.financials.periods.PeriodRangeTest] 
08:58:13.324 [main] DEBUG o.s.t.c.s.DependencyInjectionTestExecutionListener - Performing dependency injection for test context [[[email protected] testClass = PeriodRangeTest, testInstance = [email protected], testMethod = [null], testException = [null], mergedContextConfiguration = [[email protected] testClass = PeriodRangeTest, locations = '{}', classes = '{class de.unit4.financials.JUnitConfig}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{}', contextLoader = 'org.springframework.boot.test.SpringApplicationContextLoader', parent = [null]]]]. 
08:58:13.395 [main] DEBUG o.s.core.env.StandardEnvironment - Adding [systemProperties] PropertySource with lowest search precedence 
08:58:13.398 [main] DEBUG o.s.core.env.StandardEnvironment - Adding [systemEnvironment] PropertySource with lowest search precedence 
08:58:13.398 [main] DEBUG o.s.core.env.StandardEnvironment - Initialized StandardEnvironment with PropertySources [systemProperties,systemEnvironment] 
08:58:13.401 [main] DEBUG o.s.core.env.StandardEnvironment - Adding [integrationTest] PropertySource with search precedence immediately lower than [systemEnvironment] 

    . ____   _   __ _ _ 
/\\/___'_ __ _ _(_)_ __ __ _ \ \ \ \ 
(()\___ | '_ | '_| | '_ \/ _` | \ \ \ \ 
\\/ ___)| |_)| | | | | || (_| | )))) 
    ' |____| .__|_| |_|_| |_\__, |//// 
=========|_|==============|___/=/_/_/_/ 
:: Spring Boot ::  (v1.2.5.RELEASE) 

2015-07-20 08:58:13.766 INFO 8552 --- [   main] d.u.financials.periods.PeriodRangeTest : Starting PeriodRangeTest on gsender with PID 8552 (C:\Users\gsender\Documents\workspace-libs\FinancialsUtility\target\test-classes started by GSender in C:\Users\gsender\Documents\workspace-libs\FinancialsUtility) 
2015-07-20 08:58:13.812 INFO 8552 --- [   main] s.c.a.AnnotationConfigApplicationContext : Refreshing org.spring[email protected]524d6d96: startup date [Mon Jul 20 08:58:13 CEST 2015]; root of context hierarchy 
2015-07-20 08:58:15.572 INFO 8552 --- [   main] o.s.j.d.e.EmbeddedDatabaseFactory  : Creating embedded database 'FanUtilDB' 
2015-07-20 08:58:15.823 INFO 8552 --- [   main] o.s.jdbc.datasource.init.ScriptUtils  : Executing SQL script from class path resource [schema.sql] 
2015-07-20 08:58:15.851 INFO 8552 --- [   main] o.s.jdbc.datasource.init.ScriptUtils  : Executed SQL script from class path resource [schema.sql] in 28 ms. 
2015-07-20 08:58:15.851 INFO 8552 --- [   main] o.s.jdbc.datasource.init.ScriptUtils  : Executing SQL script from class path resource [data.sql] 
2015-07-20 08:58:15.990 INFO 8552 --- [   main] o.s.jdbc.datasource.init.ScriptUtils  : Executed SQL script from class path resource [data.sql] in 139 ms. 
08:58:16.007 [main] INFO Datasource org.springframework.jdbc.data[email protected]60094a13 || de.unit4.financials.JUnitConfig getDataSource 54 
08:58:16.197 [main] INFO oas_company = 28 || de.unit4.financials.JUnitConfig countTableRows 74 
08:58:16.199 [main] INFO oas_agm = 2 || de.unit4.financials.JUnitConfig countTableRows 74 
08:58:16.201 [main] INFO oas_agmlist = 2 || de.unit4.financials.JUnitConfig countTableRows 74 
08:58:16.203 [main] INFO com_usr = 52 || de.unit4.financials.JUnitConfig countTableRows 74 
08:58:16.205 [main] INFO com_capab = 17 || de.unit4.financials.JUnitConfig countTableRows 74 
2015-07-20 08:58:16.271 INFO 8552 --- [   main] o.s.jdbc.datasource.init.ScriptUtils  : Executing SQL script from URL [file:/C:/Users/gsender/Documents/workspace-libs/FinancialsUtility/target/test-classes/schema.sql] 
2015-07-20 08:58:16.285 INFO 8552 --- [   main] o.s.jdbc.datasource.init.ScriptUtils  : Executed SQL script from URL [file:/C:/Users/gsender/Documents/workspace-libs/FinancialsUtility/target/test-classes/schema.sql] in 14 ms. 
2015-07-20 08:58:16.289 INFO 8552 --- [   main] o.s.jdbc.datasource.init.ScriptUtils  : Executing SQL script from URL [file:/C:/Users/gsender/Documents/workspace-libs/FinancialsUtility/target/test-classes/data.sql] 
2015-07-20 08:58:16.391 INFO 8552 --- [   main] o.s.jdbc.datasource.init.ScriptUtils  : Executed SQL script from URL [file:/C:/Users/gsender/Documents/workspace-libs/FinancialsUtility/target/test-classes/data.sql] in 101 ms. 
2015-07-20 08:58:16.555 INFO 8552 --- [   main] j.LocalContainerEntityManagerFactoryBean : Building JPA container EntityManagerFactory for persistence unit 'default' 
2015-07-20 08:58:16.590 INFO 8552 --- [   main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [ 
    name: default 
    ...] 
2015-07-20 08:58:16.682 INFO 8552 --- [   main] org.hibernate.Version     : HHH000412: Hibernate Core {4.3.10.Final} 
2015-07-20 08:58:16.684 INFO 8552 --- [   main] org.hibernate.cfg.Environment   : HHH000206: hibernate.properties not found 
2015-07-20 08:58:16.686 INFO 8552 --- [   main] org.hibernate.cfg.Environment   : HHH000021: Bytecode provider name : javassist 
2015-07-20 08:58:16.979 INFO 8552 --- [   main] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {4.0.5.Final} 
2015-07-20 08:58:17.136 INFO 8552 --- [   main] org.hibernate.dialect.Dialect   : HHH000400: Using dialect: org.hibernate.dialect.H2Dialect 
2015-07-20 08:58:17.424 INFO 8552 --- [   main] o.h.h.i.ast.ASTQueryTranslatorFactory : HHH000397: Using ASTQueryTranslatorFactory 
2015-07-20 08:58:18.153 INFO 8552 --- [   main] org.hibernate.tool.hbm2ddl.SchemaExport : HHH000227: Running hbm2ddl schema export 
2015-07-20 08:58:18.178 INFO 8552 --- [   main] org.hibernate.tool.hbm2ddl.SchemaExport : HHH000230: Schema export complete 
2015-07-20 08:58:19.063 INFO 8552 --- [   main] d.u.financials.periods.PeriodRangeTest : Started PeriodRangeTest in 5.659 seconds (JVM running for 7.356) 
08:58:19.099 [main] INFO Datasource org.springframework.jdbc.data[email protected]60094a13 || de.unit4.financials.periods.CurrentPeriodDBFactory getCurrentPeriod 63 
08:58:19.127 [main] INFO oas_company = 0 || de.unit4.financials.FinancialsUtilApplicationTests countTableRows 40 
08:58:19.128 [main] INFO oas_agm = 0 || de.unit4.financials.FinancialsUtilApplicationTests countTableRows 40 
08:58:19.128 [main] INFO oas_agmlist = 0 || de.unit4.financials.FinancialsUtilApplicationTests countTableRows 40 
08:58:19.129 [main] INFO com_usr = 52 || de.unit4.financials.FinancialsUtilApplicationTests countTableRows 40 
08:58:19.130 [main] INFO com_capab = 17 || de.unit4.financials.FinancialsUtilApplicationTests countTableRows 40 
2015-07-20 08:58:19.134 INFO 8552 --- [  Thread-1] s.c.a.AnnotationConfigApplicationContext : Closing org.spring[email protected]524d6d96: startup date [Mon Jul 20 08:58:13 CEST 2015]; root of context hierarchy 
2015-07-20 08:58:19.386 INFO 8552 --- [  Thread-1] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default' 
2015-07-20 08:58:19.387 INFO 8552 --- [  Thread-1] org.hibernate.tool.hbm2ddl.SchemaExport : HHH000227: Running hbm2ddl schema export 
2015-07-20 08:58:19.398 INFO 8552 --- [  Thread-1] org.hibernate.tool.hbm2ddl.SchemaExport : HHH000230: Schema export complete 

對於表創建我使用(例如):

drop table IF EXISTS oas_company; 
CREATE TABLE IF NOT EXISTS oas_company ( 
    code    varchar(12) NOT NULL, 
    code_cs    int NOT NULL, 

對於數據插入我用途:

delete from oas_agm; 
INSERT INTO oas_agm(code, tstamp, name, sname, adddate, deldate, moddate, usrname) 
    VALUES('U4SW-JUNIT-1', 1, 'Account Test Entwicklung', 'debit', '2015-07-15 00:00:00.0', NULL, '2015-07-15 15:31:39.0', 'INSTALL'); 

感謝您對這個令人困惑的結果有任何幫助。

回答

3

我找到了解決方案:Hibernate在初始化後(通過Spring Boot)重新創建表。我添加了spring.jpa.hibernate.ddl-auto=noneapplication.properties並且問題消失了。

這是第一次發生在一個項目中。目前還不清楚爲什麼只有五個表中的三個被重新創建。起初,我認爲這是由於一個「舊」數據庫文件,但後來我從H2切換到HSQL,問題依然存在。 Hibernate的一個錯誤告訴我解決方案的路徑(無法刪除...)。