2013-01-11 18 views
1

我有我的單元測試失敗的問題,因爲我可以根本不訪問之前剛剛創建的表。不能從JUnit訪問HSQLDB表

從控制檯的輸出中,我可以看到執行了以下Hibernate命令。

Hibernate: alter table Server_Node drop constraint FK3621657E1249AF15 
Hibernate: alter table Server_Node drop constraint FK3621657E2528B004 
Hibernate: drop table EmailAccountSettings if exists 
Hibernate: drop table Node if exists 
Hibernate: drop table Server if exists 
Hibernate: drop table Server_Node if exists 
Hibernate: create table EmailAccountSettings (id varchar(255) generated by default as identity (start with 1), description varchar(255), name varchar(255), primary key (id)) 
Hibernate: create table Node (id bigint generated by default as identity (start with 1), name varchar(255), primary key (id), unique (name)) 
Hibernate: create table Server (id integer generated by default as identity (start with 1), name varchar(255), primary key (id), unique (name)) 
Hibernate: create table Server_Node (Server_id integer not null, nodes_id bigint not null, primary key (Server_id, nodes_id)) 
Hibernate: alter table Server_Node add constraint FK3621657E1249AF15 foreign key (nodes_id) references Node 
Hibernate: alter table Server_Node add constraint FK3621657E2528B004 foreign key (Server_id) references Server 
Hibernate: insert into Server (id, name) values (default, ?) 

正如你所看到的值插入表Server。但是下一個測試用例試圖在表格EmailAccountSettings中插入一些導致以下錯誤的內容。

javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: user lacks privilege or object not found: EMAILACCOUNTSETTINGS 
    at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1377) 
    at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1300) 
    at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:273) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    ... 

任何想法什麼是錯誤的表EmailAccountSettings

我正在使用Spring + Hibernate + HSQLDB + JUnit來簡要介紹所涉及的組件。

回答

4

找到此問題的原因。突然之間,燈光亮起來,再次看着桌子上的創作陳述。

Hibernate: create table EmailAccountSettings (id varchar(255) generated by default as identity (start with 1), description varchar(255), name varchar(255), primary key (id)) 

無法創建數據類型爲varchar的標識列。因此該聲明不成功。但是在運行測試時,這在控制檯中不可見。

更改實體中的數據類型後,一切都按預期工作。