hsql mybatis 表不存在_单元测试MyBatis与HSQL而不是Oracle
我想使用HSQL內存數據庫對MyBatis持久層進行單元測試.真正的應用程序使用Oracle數據庫.這工作正常,我們開始為id列添加自動遞增的數字. Oracle需要使用序列來獲取遞增的數字,因此在Oracle數據庫中創建了一個名為basis_seq的序列.在我的MyBatis mapper
XML文件中我有這個:
SELECT basis_seq.NEXTVAL FROM DUAL
insert into basis
(id, name)
values
(#{id}, #{name})
當我運行應用程序但是單元測試發生錯誤時,這可以工作:
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
據了解,“DUAL”是甲骨文中存儲序列的某種虛擬表,我的測試數據庫中沒有.如果我刪除< selectKey> -tag單元測試工作(因為HSQL可以自動生成標記為身份的列的id),而不是真正的應用程序.一個解決方法是為單位測試創建單獨的MyBatis映射程序XML文件,而不使用< selectKey> -tag,但這是不希望的,因為我想測試真正的配置.
有沒有辦法在HSQL中創建和使用序列,也可能有一些MyBatis的解決方法?或者我應該使用另一個數據庫進行單元測試,如H2?
我用:
> Spring 3.0.5
> HSQL 2.2.4
> MyBatis 3.0.5
更新:
從fredt得到答案后,我是如何編輯我的Spring配置的:
在我定義了我的數據源之前:
現在我這樣做:
destroy-method="close">
另外,在schema.sql中我需要創建序列:
CREATE SEQUENCE BASIS_SEQ START WITH 1000 INCREMENT BY 1;
CREATE SEQUENCE OTHER_SEQ START WITH 1000 INCREMENT BY 1;
(如果在單元測試期間多次運行此腳本,請記住添加下拉序列BASIS_SEQ(如果存在);在schema.sql的頂部)
總結
以上是生活随笔為你收集整理的hsql mybatis 表不存在_单元测试MyBatis与HSQL而不是Oracle的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 治输卵管堵塞价格是多少
- 下一篇: 单片机涡轮流量传感器_关于涡轮流量计传感