hsql mybatis 表不存在_单元测试MyBatis与HSQL而不是Oracle
我想使用HSQL內(nèi)存數(shù)據(jù)庫(kù)對(duì)MyBatis持久層進(jìn)行單元測(cè)試.真正的應(yīng)用程序使用Oracle數(shù)據(jù)庫(kù).這工作正常,我們開(kāi)始為id列添加自動(dòng)遞增的數(shù)字. Oracle需要使用序列來(lái)獲取遞增的數(shù)字,因此在Oracle數(shù)據(jù)庫(kù)中創(chuàng)建了一個(gè)名為basis_seq的序列.在我的MyBatis mapper
XML文件中我有這個(gè):
SELECT basis_seq.NEXTVAL FROM DUAL
insert into basis
(id, name)
values
(#{id}, #{name})
當(dāng)我運(yùn)行應(yīng)用程序但是單元測(cè)試發(fā)生錯(cuò)誤時(shí),這可以工作:
org.springframework.jdbc.BadSqlGrammarException: Error selecting key
or setting result to parameter object. Cause:
java.sql.SQLSyntaxErrorException: user lacks privilege or object not
found: DUAL ; bad SQL grammar []; nested exception is
java.sql.SQLSyntaxErrorException: user lacks privilege or object not
found: DUAL
據(jù)了解,“DUAL”是甲骨文中存儲(chǔ)序列的某種虛擬表,我的測(cè)試數(shù)據(jù)庫(kù)中沒(méi)有.如果我刪除< selectKey> -tag單元測(cè)試工作(因?yàn)镠SQL可以自動(dòng)生成標(biāo)記為身份的列的id),而不是真正的應(yīng)用程序.一個(gè)解決方法是為單位測(cè)試創(chuàng)建單獨(dú)的MyBatis映射程序XML文件,而不使用< selectKey> -tag,但這是不希望的,因?yàn)槲蚁霚y(cè)試真正的配置.
有沒(méi)有辦法在HSQL中創(chuàng)建和使用序列,也可能有一些MyBatis的解決方法?或者我應(yīng)該使用另一個(gè)數(shù)據(jù)庫(kù)進(jìn)行單元測(cè)試,如H2?
我用:
> Spring 3.0.5
> HSQL 2.2.4
> MyBatis 3.0.5
更新:
從fredt得到答案后,我是如何編輯我的Spring配置的:
在我定義了我的數(shù)據(jù)源之前:
現(xiàn)在我這樣做:
destroy-method="close">
另外,在schema.sql中我需要?jiǎng)?chuàng)建序列:
CREATE SEQUENCE BASIS_SEQ START WITH 1000 INCREMENT BY 1;
CREATE SEQUENCE OTHER_SEQ START WITH 1000 INCREMENT BY 1;
(如果在單元測(cè)試期間多次運(yùn)行此腳本,請(qǐng)記住添加下拉序列BASIS_SEQ(如果存在);在schema.sql的頂部)
總結(jié)
以上是生活随笔為你收集整理的hsql mybatis 表不存在_单元测试MyBatis与HSQL而不是Oracle的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 治输卵管堵塞价格是多少
- 下一篇: dosbox 伪指令dd为什么会报错_什