2016-02-16 123 views
0

我有我從中生成休眠實體的MySQL數據庫,現在我需要從這些實體生成內存數據庫進行測試。嘗試運行我的單元測試時出現此錯誤。從休眠實體生成數據庫

/*** 主] ohengine.jdbc.spi.SqlExceptionHelper:SQL錯誤:42102,SQLSTATE:42S02 2016年2月16日18:10:47.864 ERROR 29758 --- [主要] ohengine。 jdbc.spi.SqlExceptionHelper:未找到表「tbl_all_orders」; SQL語句: **/

它看起來像數據庫創建失敗。

這裏是我的測試屬性文件內容:

db.driver: org.h2.Driver 
db.url: jdbc:h2:mem:testdb;MODE=MySQL;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;DATABASE_TO_UPPER=false 
db.username: sa 
db.password: 

hibernate.dialect: org.hibernate.dialect.H2Dialect 
hibernate.show_sql: true 
hibernate.format_sql: true 
hibernate.hbm2ddl.auto: create 
hibernate.archive.autodetection=class, hbm 
entitymanager.packagesToScan: linda 
+0

根據錯誤您的表名爲tbl_all_orders在哪裏? – logger

+0

它是Linda的子包中的一個實體,它在entitymanager.packagesToScan中提到:linda – Monaappetite

+0

但您是否創建了表?我的猜測是你沒有這樣,這就是爲什麼這個錯誤顯示。如果你這樣做,那麼請給我看看你創建表的代碼。 (又名:架構) – logger

回答

0

這是我H2測試的例子。你可以稍微改變一下,看看它適合你的情況。主要是你需要手動創建數據庫表,讓你的config.xml包含你的數據庫。 您可以手動創建.sql文件,並創建表並讓bean在您使用spring時包含它。

someTest.java

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration("testConfig.xml") // <-- this xml you need to include 
public class PortDaoImplTest { 

    private static final Logger log = Logger.getLogger(sysInfoDaoImplTest.class); 

    @Autowired 
    private sysInfoDaoImpl sysDao; 

    @After 
    public void tearDown(){ 
     portDao = null; 
    } 

    @Test 
    public void testGetPort() { 
     log.info("Testing getInfo(String id)..."); 
     SysInfo p = sysDao.getInfo("nysdin2039"); 
     assertNotNull(p); 
    } 

testConfig.xml

...xml header...      

      <!-- h2 driver --> 
     <bean id="test.dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" lazy-init="false" > 
      <property name="driverClassName" value="org.h2.Driver" /> 
      <property name="url" value="jdbc:h2:mem:test_mem;DB_CLOSE_DELAY=-1;MODE=ORACLE" /> 
     </bean> 

     <!-- datasource file --> 
     <jdbc:initialize-database data-source="test.dataSource"> 
      <!--  table list --> 
      <jdbc:script location="com/yourPath/h2/schema.sql" /> 
      <jdbc:script location="com/yourPath/h2/test_data.sql" /> 

     </jdbc:initialize-database> 

     <!-- bean def --> 
     <bean id="sysInfoDao" class="com.mycompanyName.sysInfoDaoImpl" > 
      <property name="log" ref="test.log" /> 
      <property name="dataSource" ref="test.dataSource" /> 
     </bean> 

.... 

H2 schema.sql文件文件

drop table IF EXISTS tbl_all_orders; 
CREATE TABLE tbl_all_orders 
(
    your_stuff_ID  NUMBER    NOT NULL, 
    your_other_column_stuff    VARCHAR2(15) DEFAULT 
); 

...添加相應的約束你或列...

test_data.sql f ILE

INSERT into tbl_all_orders 
    (your_column_names... , your_other_column_names...) 
VALUES 
    (1, 'values',...); 
0

這樣做是爲了測試我的工作配置(內部的src /測試/資源文件夾database.properties)

# DB properties 
db.driver=org.h2.Driver 
db.url=jdbc:h2:mem:test;DB_CLOSE_DELAY=-1 
db.username=sa 
db.password= 

# Hibernate Configuration 
hibernate.dialect=org.hibernate.dialect.H2Dialect 
hibernate.show_sql=true 

# validate: validate the schema, makes no changes to the database. 
# update: update the schema. 
# create: creates the schema, destroying previous data. 
# create-drop: drop the schema at the end of the session. 
hibernate.hbm2ddl.auto=create 
entitymanager.packages.to.scan=abcde 

順便說一句,你的單元測試不應該進入數據庫。