HSQLDB约束违规&用于HSQLDB内存设置的SQL查询日志

时间:2010-03-29 21:41:12

标签: java hibernate orm junit hsqldb

我们有一个设置,我们使用嵌入式HSQLDB来支持java中的Hibernate / JPA单元测试,我们使用内存数据库模式,因为我们只是希望在测试运行后扔掉数据库。我的问题是其中一个测试由于违反约束而失败,并且HSQLDB将列列为SYS_CT_286,并且日志中显示的查询是准备好的语句,我无法看到实际参数值是什么(它们被替换为'?')。我的问题是:

1-有没有办法可以看到实际运行的SQL? (比如mysql查询日志?)。

2- SYS_CT_286究竟是什么?它不是我的专栏之一,它是生成的列吗?有什么明显的东西可能有问题吗?

感谢。

2 个答案:

答案 0 :(得分:1)

HSQLDB保留一个重做日志,这可能对调试已运行的sql很有用,但我不确定它是否为内存数据库执行此操作。如果将db暂时更改为名为test的基于文件的db,则重做日志应命名为test.log,但在干净关闭时它会消失。

SYS_CT_286很可能是具有系统生成名称的约束。同样,如果您创建基于文件的数据库,您可能能够查看它并找出它的约束条件。如果它是您正在定义的约束,您甚至可以更改映射,以便获得合理的名称。我知道无论如何你都可以使用外键约束。

答案 1 :(得分:1)

  

有没有办法可以看到实际执行的SQL?

我不确定HSQLDB是否允许记录正在执行的SQL语句(如select),但您可以使用P6Spy之类的代理JDBC驱动程序(已在this answer中提及)。

  

SYS_CT_286究竟是什么?

这是一个约束(我打赌一个独特的约束)。