gpt4 book ai didi

java - 如何调试结合 hsqldb 处理 hibernate.hbm2ddl.import_files 值?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:32:18 24 4
gpt4 key购买 nike

在我正在处理的 Java 项目中,我为我们的单元测试设置了以下设置:

  • 我正在使用 Spring Test MVC、@RunWith(SpringJUnit4ClassRunner.class)@WebAppConfiguration 来运行单元测试,并且我创建了一个 MockMvc 使用 webAppContextSetup(webApplicationContext) 测试应用程序的实例。
  • 我有一个 Hibernate 配置来设置内存中的 HSQLDB,所有表都是基于 @Entity 类创建的。
  • 在 Hibernate 配置中,我正在设置 hibernate.hbm2ddl.import_files 属性以使用 SQL 语句加载文件 import.sql 以填充(内存中) 数据库。

现在,我已经确认了以上所有这些工作:

  • 测试可以成功地从内存数据库中插入/检索。
  • 执行了 import.sql 中的 SQL 语句,正如各种测试所证实的那样。

现在的问题:我在 import.sql 中添加的语句发生的错误似乎没有在任何地方报告,也没有任何迹象表明错误发生在全部。相反,后续语句根本不会执行。 (我已经通过测试证实了这一点。)

是否有任何方式或位置报告这些错误,而我显然没有意识到这些错误?是否有额外的 Hibernate 属性?

hibernate 测试配置摘录:

    <bean id="sessionFactory" name="mySessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="myDataSource" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.archive.autodetection">class,hbm</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.connection.driver_class">org.hsqldb.jdbcDriver</prop>
<prop key="hibernate.connection.username">sa</prop>
<prop key="hibernate.connection.password"></prop>
<prop key="hibernate.connection.url">jdbc:hsqldb:mem:myschema</prop>
<prop key="hibernate.hbm2ddl.auto">create</prop>
<prop key="hibernate.hbm2ddl.import_files">configuration/test/import.sql</prop>
<prop key="hibernate.hbm2ddl.import_files_sql_extractor">org.hibernate.tool.hbm2ddl.MultipleLinesSqlCommandExtractor</prop>
<!-- when using type="yes_no" for booleans, the line below allow booleans in HQL expressions: -->
<prop key="hibernate.query.substitutions">true 'Y', false 'N'</prop>
</props>
</property>
</bean>

最佳答案

我无法获得异常记录,就像@Julien Kroneg 建议的那样。

但我能够在 org.hibernate.tool.hbm2ddl.SchemaExport#importScript 方法的 catch block 中放置一个断点,其中 trimmedSql 表示每个正在应用的 SQL 语句:

catch ( Exception e ) {
if (haltOnError) {
throw new ImportScriptException( "Error during statement execution (file: '"
+ namedReader.getName() + "'): " + trimmedSql, e );
}
exceptions.add(e);
LOG.unsuccessful(trimmedSql);
LOG.error(e.getMessage());
}

考虑到初始化脚本是静态的而不是真正的业务数据,这可能就足够了,一旦您让它们开始工作,它们就有希望继续工作

关于java - 如何调试结合 hsqldb 处理 hibernate.hbm2ddl.import_files 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29757672/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com