0

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

1-有没有一种方法可以让我看到正在执行的实际 SQL?(例如 mysql 查询日志?)。

2- SYS_CT_286 到底是什么?它不是我的专栏之一,它是生成的专栏吗?有什么明显的问题吗?

谢谢。

4

2 回答 2

1

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

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

于 2010-03-29T23:00:19.450 回答
1

有没有一种方法可以让我看到正在执行的实际 SQL?

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

SYS_CT_286 到底是什么?

这是一个约束(我敢打赌一个唯一的约束)。

于 2010-03-29T23:05:39.067 回答