org.hibernate.exception.genericjdbception:无法执行查询(HSQLDB、hibernate、Spring、Maven)

org.hibernate.exception.genericjdbception:无法执行查询(HSQLDB、hibernate、Spring、Maven),spring,hibernate,jakarta-ee,junit4,hsqldb,Spring,Hibernate,Jakarta Ee,Junit4,Hsqldb,我使用的是Hibernate3.5.6-Final、Spring3.0.5和HSQLDB2.2.9。 我们公司在real数据库上使用Microsoft SQL 2008。我想从真实数据库中分离出来,通过脚本创建一个虚拟的HSQLDB数据库,用于jUnit测试。 在HSQL数据库管理器中,我创建了DBA模式和一个表用户,然后用一个用户arnold_foukal(用户名)填充它。接下来,我执行SHUTDOWN命令并正确创建了脚本。我试着在HSQL数据库管理器中选择这个用户名,效果很好 但现在我想将其

我使用的是Hibernate3.5.6-Final、Spring3.0.5和HSQLDB2.2.9。 我们公司在real数据库上使用Microsoft SQL 2008。我想从真实数据库中分离出来,通过脚本创建一个虚拟的HSQLDB数据库,用于jUnit测试。 在HSQL数据库管理器中,我创建了DBA模式和一个表用户,然后用一个用户arnold_foukal(用户名)填充它。接下来,我执行SHUTDOWN命令并正确创建了脚本。我试着在HSQL数据库管理器中选择这个用户名,效果很好

但现在我想将其集成到我的项目中:

1) ApplicationContext.xml

    <bean id="userDao" class="cz.mbaf.security.dao.impl.UserDaoImpl" >
        <property name="sessionFactory" ref="sessionFactory2"/>
    </bean>

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">        
        <property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
        <property name="url" value="jdbc:hsqldb:file:testdb;shutdown=true"/>
        <property name="username" value="SA"/>
        <property name="password" value=""/>
        <property name="maxActive" value="100"/>
        <property name="maxWait" value="50"/>
        <property name="poolPreparedStatements" value="true"/>
        <property name="defaultAutoCommit" value="false"/>
    </bean>

    <!-- Hibernate Session Factory  -->
    <bean id="sessionFactory2" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="dataSource" ref="proxyDataSource" />
        <property name="configurationClass">
            <value>org.hibernate.cfg.AnnotationConfiguration</value>
        </property>
        <property name="configLocation">
            <value>classpath:hibernate.cfg.xml</value>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>                
                <prop key="hibernate.connection.autocommit">true</prop>
                <prop key="hibernate.hbm2ddl.auto">update</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.use_sql_comments">true</prop>
                <prop key="hibernate.format_sql">true</prop> 
                <prop key="hibernate.order_inserts">${hibernate.order_inserts}</prop>
                <prop key="hibernate.order_updates">${hibernate.order_updates}</prop>
                <prop key="hibernate.jdbc.batch_size">${hibernate.jdbc.batch_size}</prop>                
            </props>
        </property>
    </bean>


    <bean id="txManagerTest" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory2"/>
    </bean>

    <tx:annotation-driven transaction-manager="txManagerTest"/>
当我运行getEmailTemplateTest()时,将首先执行setUp(),但不幸的是,我遇到以下异常:

Testsuite: cz.mbaf.contact.test.EmailServiceTest Hibernate: 
    /* dynamic native SQL query */ select
        u.* 
    from
        Users u 
    where
        u.Delete_statute = 0 
        and u.users_status = 1 
        and u.User_name collate SQL_Latin1_General_Cp1250_CS_AS = ? Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 7,69 sec

------------- Standard Output --------------- Hibernate: 
    /* dynamic native SQL query */ select
        u.* 
    from
        Users u 
    where
        u.Delete_statute = 0 
        and u.users_status = 1 
        and u.User_name collate SQL_Latin1_General_Cp1250_CS_AS = ?
------------- ---------------- --------------- Testcase: getEmailTemplateTest(cz.mbaf.contact.test.EmailServiceTest):   Caused an ERROR could not execute query org.hibernate.exception.GenericJDBCException: could not execute query   at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:140)    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:128) Test cz.mbaf.contact.test.EmailServiceTest FAILED
谢谢你的帮助

编辑://这是我的testdb.script:

SET DATABASE UNIQUE NAME HSQLDB3EEFDE0E4E
SET DATABASE GC 0
SET DATABASE DEFAULT RESULT MEMORY ROWS 0
SET DATABASE EVENT LOG LEVEL 0
SET DATABASE SQL NAMES FALSE
SET DATABASE SQL REGULAR NAMES TRUE
SET DATABASE SQL REFERENCES FALSE
SET DATABASE SQL SIZE TRUE
SET DATABASE SQL TYPES FALSE
SET DATABASE SQL TDC DELETE TRUE
SET DATABASE SQL TDC UPDATE TRUE
SET DATABASE SQL TRANSLATE TTI TYPES TRUE
SET DATABASE SQL CONCAT NULLS TRUE
SET DATABASE SQL NULLS FIRST TRUE
SET DATABASE SQL UNIQUE NULLS TRUE
SET DATABASE SQL CONVERT TRUNCATE TRUE
SET DATABASE SQL AVG SCALE 0
SET DATABASE SQL DOUBLE NAN TRUE
SET DATABASE SQL LONGVAR IS LOB FALSE
SET DATABASE SQL SYNTAX MSS TRUE
SET DATABASE TRANSACTION CONTROL LOCKS
SET DATABASE DEFAULT ISOLATION LEVEL READ COMMITTED
SET DATABASE TRANSACTION ROLLBACK ON CONFLICT TRUE
SET DATABASE TEXT TABLE DEFAULTS ''
SET FILES WRITE DELAY 500 MILLIS
SET FILES BACKUP INCREMENT TRUE
SET FILES CACHE SIZE 10000
SET FILES CACHE ROWS 50000
SET FILES SCALE 32
SET FILES LOB SCALE 32
SET FILES DEFRAG 0
SET FILES NIO TRUE
SET FILES NIO SIZE 256
SET FILES LOG TRUE
SET FILES LOG SIZE 50
CREATE USER SA PASSWORD DIGEST 'd41d8cd98f00b204e9800998ecf8427e'
ALTER USER SA SET LOCAL TRUE
CREATE SCHEMA PUBLIC AUTHORIZATION DBA
CREATE SCHEMA DBA AUTHORIZATION SA
CREATE COLLATION DBA.SQL_LATIN1_GENERAL_CP1250_CS_AS FOR INFORMATION_SCHEMA.SQL_TEXT FROM SQL_TEXT PAD SPACE
SET SCHEMA DBA
CREATE MEMORY TABLE DBA.USERS(USERS_ID INTEGER PRIMARY KEY,USER_NAME VARCHAR(16777216),USERS_TYP VARCHAR(16777216),FULL_NAME VARCHAR(16777216),SHORT_NAME VARCHAR(16777216),USERS_FIRSTNAME VARCHAR(16777216),USERS_LASTNAME VARCHAR(16777216),USERS_INIT VARCHAR(10),DEPARTMENT VARCHAR(16777216),PERSON_DESCRIPTION VARCHAR(16777216),REAL_NAME VARCHAR(16777216),PHONE VARCHAR(50),PHONE2 VARCHAR(50),PHONE3 VARCHAR(50),GROUP_PHONE VARCHAR(16777216),LINE VARCHAR(3),GROUP_LINE VARCHAR(3),SWITCHBOARD_STATUTE_ID TINYINT,SWITCHBOARD_LINE SMALLINT,SWITCHBOARD_LAST_ACTION TIMESTAMP,FAX VARCHAR(50),MOBILE VARCHAR(50),EMAIL VARCHAR(500),OPERATOR_GROUP_ID VARCHAR(3),DEPARTMENT_ID INTEGER,PRIMARY_GROUP_USER INTEGER NOT NULL,WORKPLACE INTEGER,USERS_STATUS INTEGER,USERS_END_DATE TIMESTAMP,SIP_ACCOUNT VARCHAR(50),SKYPE_ACCOUNT VARCHAR(50),INSERT_USER VARCHAR(16777216) NOT NULL,INSERT_DATE TIMESTAMP NOT NULL,UPDATE_USER VARCHAR(16777216),UPDATE_DATE TIMESTAMP,DELETE_USER VARCHAR(16777216),DELETE_DATE TIMESTAMP,DELETE_STATUTE INTEGER NOT NULL,UPDATE_DATE_DBO TIMESTAMP,USER_ALIAS VARCHAR(50),WEB_PASSWORD VARBINARY(256),SOUD_CTU INTEGER,LANGUAGE INTEGER NOT NULL,PASSWORD VARCHAR(50),ACCOUNT_EXPIRED BIT(1) NOT NULL,ACCOUNT_LOCKED BIT(1) NOT NULL,CREDENTIALS_EXPIRED BIT(1) NOT NULL,ACCOUNT_ENABLED BIT(1) NOT NULL,TEAMLEADER INTEGER,IP_ADDRESS VARCHAR(16777216) NOT NULL)
ALTER SEQUENCE SYSTEM_LOBS.LOB_ID RESTART WITH 1
SET DATABASE DEFAULT INITIAL SCHEMA DBA
GRANT USAGE ON DOMAIN INFORMATION_SCHEMA.YES_OR_NO TO PUBLIC
GRANT USAGE ON DOMAIN INFORMATION_SCHEMA.TIME_STAMP TO PUBLIC
GRANT USAGE ON DOMAIN INFORMATION_SCHEMA.CARDINAL_NUMBER TO PUBLIC
GRANT USAGE ON DOMAIN INFORMATION_SCHEMA.CHARACTER_DATA TO PUBLIC
GRANT USAGE ON DOMAIN INFORMATION_SCHEMA.SQL_IDENTIFIER TO PUBLIC
GRANT DBA TO SA
SET SCHEMA SYSTEM_LOBS
INSERT INTO BLOCKS VALUES(0,2147483647,0)
SET SCHEMA DBA
INSERT INTO USERS VALUES(1,'arnold_foukal',NULL,'Arnold Foukal','A. Foukal','Arnold','Foukal','AF','Department 1',NULL,'Arnold Foukal','777888111','777888112','777888113',NULL,NULL,NULL,NULL,NULL,NULL,'777888114',NULL,'foukal@mbaf.cz','20',1,0,1,1,NULL,'012',NULL,'jony','2010-07-01 11:07:47.370000','jony','2011-02-25 11:42:34.110000',NULL,NULL,0,NULL,NULL,NULL,NULL,1,'79ce95c4d1e7524f969b9fced078f67e47dc394f','0','0','0','1',NULL,'Dynamic')

查询引用特定于MS SQL Server的特定排序规则。在HSQLDB下运行时,除非事先在数据库中创建此排序规则,否则无法使用此排序规则

CREATE COLLATION SQL_Latin1_General_Cp1250_CS_AS FOR INFORMATION_SCHEMA.SQL_TEXT 
    FROM INFORMATION_SCHEMA.SQL_TEXT PAD SPACE

HSQLDB语法不允许在WHERE子句中使用COLLATE。除了MS SQL Server特定的排序规则类型之外,这是一个更大的问题


我正在努力寻找解决方案,因为我也有同样的问题(prod中的MS SQL和HSQLDB可能是用于测试的内存数据库)。

谢谢您的回答!我试过了,新的排序规则现在真的在
信息\u模式中。但是,当我在HSQL数据库管理器命令中执行时,
SELECT*FROM“DBA”。“USERS”其中User\u name collate SQL\u Latin1\u General\u Cp1250\u CS\u AS='arnold\u foukal'
,我得到以下错误:
用户缺少权限或找不到对象:DBA/错误代码:-5501/状态:-42501
谢谢!使用
SELECT*FROM USERS…
DBA
是一个角色而不是架构。这会产生相同的结果-相同的错误。我添加了testdb.script文件代码只是不要创建DBA模式,忘记在查询中的任何地方使用“DBA”或任何其他模式名称。我仅使用您的代码+创建表+插入创建新数据库,我得到以下错误:
java.sql.SQLSyntaxErrorException:用户缺少权限或找不到对象:PUBLIC
Testsuite: cz.mbaf.contact.test.EmailServiceTest Hibernate: 
    /* dynamic native SQL query */ select
        u.* 
    from
        Users u 
    where
        u.Delete_statute = 0 
        and u.users_status = 1 
        and u.User_name collate SQL_Latin1_General_Cp1250_CS_AS = ? Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 7,69 sec

------------- Standard Output --------------- Hibernate: 
    /* dynamic native SQL query */ select
        u.* 
    from
        Users u 
    where
        u.Delete_statute = 0 
        and u.users_status = 1 
        and u.User_name collate SQL_Latin1_General_Cp1250_CS_AS = ?
------------- ---------------- --------------- Testcase: getEmailTemplateTest(cz.mbaf.contact.test.EmailServiceTest):   Caused an ERROR could not execute query org.hibernate.exception.GenericJDBCException: could not execute query   at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:140)    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:128) Test cz.mbaf.contact.test.EmailServiceTest FAILED
SET DATABASE UNIQUE NAME HSQLDB3EEFDE0E4E
SET DATABASE GC 0
SET DATABASE DEFAULT RESULT MEMORY ROWS 0
SET DATABASE EVENT LOG LEVEL 0
SET DATABASE SQL NAMES FALSE
SET DATABASE SQL REGULAR NAMES TRUE
SET DATABASE SQL REFERENCES FALSE
SET DATABASE SQL SIZE TRUE
SET DATABASE SQL TYPES FALSE
SET DATABASE SQL TDC DELETE TRUE
SET DATABASE SQL TDC UPDATE TRUE
SET DATABASE SQL TRANSLATE TTI TYPES TRUE
SET DATABASE SQL CONCAT NULLS TRUE
SET DATABASE SQL NULLS FIRST TRUE
SET DATABASE SQL UNIQUE NULLS TRUE
SET DATABASE SQL CONVERT TRUNCATE TRUE
SET DATABASE SQL AVG SCALE 0
SET DATABASE SQL DOUBLE NAN TRUE
SET DATABASE SQL LONGVAR IS LOB FALSE
SET DATABASE SQL SYNTAX MSS TRUE
SET DATABASE TRANSACTION CONTROL LOCKS
SET DATABASE DEFAULT ISOLATION LEVEL READ COMMITTED
SET DATABASE TRANSACTION ROLLBACK ON CONFLICT TRUE
SET DATABASE TEXT TABLE DEFAULTS ''
SET FILES WRITE DELAY 500 MILLIS
SET FILES BACKUP INCREMENT TRUE
SET FILES CACHE SIZE 10000
SET FILES CACHE ROWS 50000
SET FILES SCALE 32
SET FILES LOB SCALE 32
SET FILES DEFRAG 0
SET FILES NIO TRUE
SET FILES NIO SIZE 256
SET FILES LOG TRUE
SET FILES LOG SIZE 50
CREATE USER SA PASSWORD DIGEST 'd41d8cd98f00b204e9800998ecf8427e'
ALTER USER SA SET LOCAL TRUE
CREATE SCHEMA PUBLIC AUTHORIZATION DBA
CREATE SCHEMA DBA AUTHORIZATION SA
CREATE COLLATION DBA.SQL_LATIN1_GENERAL_CP1250_CS_AS FOR INFORMATION_SCHEMA.SQL_TEXT FROM SQL_TEXT PAD SPACE
SET SCHEMA DBA
CREATE MEMORY TABLE DBA.USERS(USERS_ID INTEGER PRIMARY KEY,USER_NAME VARCHAR(16777216),USERS_TYP VARCHAR(16777216),FULL_NAME VARCHAR(16777216),SHORT_NAME VARCHAR(16777216),USERS_FIRSTNAME VARCHAR(16777216),USERS_LASTNAME VARCHAR(16777216),USERS_INIT VARCHAR(10),DEPARTMENT VARCHAR(16777216),PERSON_DESCRIPTION VARCHAR(16777216),REAL_NAME VARCHAR(16777216),PHONE VARCHAR(50),PHONE2 VARCHAR(50),PHONE3 VARCHAR(50),GROUP_PHONE VARCHAR(16777216),LINE VARCHAR(3),GROUP_LINE VARCHAR(3),SWITCHBOARD_STATUTE_ID TINYINT,SWITCHBOARD_LINE SMALLINT,SWITCHBOARD_LAST_ACTION TIMESTAMP,FAX VARCHAR(50),MOBILE VARCHAR(50),EMAIL VARCHAR(500),OPERATOR_GROUP_ID VARCHAR(3),DEPARTMENT_ID INTEGER,PRIMARY_GROUP_USER INTEGER NOT NULL,WORKPLACE INTEGER,USERS_STATUS INTEGER,USERS_END_DATE TIMESTAMP,SIP_ACCOUNT VARCHAR(50),SKYPE_ACCOUNT VARCHAR(50),INSERT_USER VARCHAR(16777216) NOT NULL,INSERT_DATE TIMESTAMP NOT NULL,UPDATE_USER VARCHAR(16777216),UPDATE_DATE TIMESTAMP,DELETE_USER VARCHAR(16777216),DELETE_DATE TIMESTAMP,DELETE_STATUTE INTEGER NOT NULL,UPDATE_DATE_DBO TIMESTAMP,USER_ALIAS VARCHAR(50),WEB_PASSWORD VARBINARY(256),SOUD_CTU INTEGER,LANGUAGE INTEGER NOT NULL,PASSWORD VARCHAR(50),ACCOUNT_EXPIRED BIT(1) NOT NULL,ACCOUNT_LOCKED BIT(1) NOT NULL,CREDENTIALS_EXPIRED BIT(1) NOT NULL,ACCOUNT_ENABLED BIT(1) NOT NULL,TEAMLEADER INTEGER,IP_ADDRESS VARCHAR(16777216) NOT NULL)
ALTER SEQUENCE SYSTEM_LOBS.LOB_ID RESTART WITH 1
SET DATABASE DEFAULT INITIAL SCHEMA DBA
GRANT USAGE ON DOMAIN INFORMATION_SCHEMA.YES_OR_NO TO PUBLIC
GRANT USAGE ON DOMAIN INFORMATION_SCHEMA.TIME_STAMP TO PUBLIC
GRANT USAGE ON DOMAIN INFORMATION_SCHEMA.CARDINAL_NUMBER TO PUBLIC
GRANT USAGE ON DOMAIN INFORMATION_SCHEMA.CHARACTER_DATA TO PUBLIC
GRANT USAGE ON DOMAIN INFORMATION_SCHEMA.SQL_IDENTIFIER TO PUBLIC
GRANT DBA TO SA
SET SCHEMA SYSTEM_LOBS
INSERT INTO BLOCKS VALUES(0,2147483647,0)
SET SCHEMA DBA
INSERT INTO USERS VALUES(1,'arnold_foukal',NULL,'Arnold Foukal','A. Foukal','Arnold','Foukal','AF','Department 1',NULL,'Arnold Foukal','777888111','777888112','777888113',NULL,NULL,NULL,NULL,NULL,NULL,'777888114',NULL,'foukal@mbaf.cz','20',1,0,1,1,NULL,'012',NULL,'jony','2010-07-01 11:07:47.370000','jony','2011-02-25 11:42:34.110000',NULL,NULL,0,NULL,NULL,NULL,NULL,1,'79ce95c4d1e7524f969b9fced078f67e47dc394f','0','0','0','1',NULL,'Dynamic')
CREATE COLLATION SQL_Latin1_General_Cp1250_CS_AS FOR INFORMATION_SCHEMA.SQL_TEXT 
    FROM INFORMATION_SCHEMA.SQL_TEXT PAD SPACE