Нарушение ограничений HSQLDB и журнал запросов SQL для настройки HSQLDB в памяти - PullRequest
0 голосов
/ 30 марта 2010

У нас есть установка, в которой мы используем встроенный HSQLDB для поддержки модульных тестов Hibernate / JPA в java, и мы используем режим базы данных в памяти, так как мы просто хотим, чтобы база данных была выброшена после запуска теста. Моя проблема заключается в том, что один из тестов не выполняется из-за нарушения ограничения, и HSQLDB отображает столбец как SYS_CT_286, а запрос, который отображается в журнале, является подготовленным оператором, в котором я не могу увидеть, каковы действительные значения параметров (они заменяются '?'). Мои вопросы:

1- Есть ли способ, с помощью которого я могу видеть фактический выполняемый SQL? (например, как журнал запросов mysql?).

2- Что такое SYS_CT_286? это не один из моих столбцов, это сгенерированный столбец? Есть ли что-то очевидное, что может быть не так с этим?

Спасибо.

Ответы [ 2 ]

1 голос
/ 30 марта 2010

Есть ли способ, с помощью которого я могу увидеть фактический выполняемый SQL?

Я не уверен, что HSQLDB позволяет регистрировать выполняемые операторы SQL (например, select), но вы можете использовать прокси-драйвер JDBC, например, P6Spy для этого (уже упоминавшийся в этот ответ ).

Что такое SYS_CT_286?

Это ограничение (и я бы поставил на уникальное ограничение).

1 голос
/ 30 марта 2010

HSQLDB хранит журнал повторов, который может быть полезен для отладки того, что sql был запущен, но я не уверен, делает ли это это для БД в памяти. Если вы временно измените свою базу данных на базу данных на основе файлов с именем test, журнал повторов должен называться test.log, но он исчезнет при чистом завершении работы.

SYS_CT_286, скорее всего, ограничение с системным именем. Опять же, если вы создадите файловую БД, вы сможете посмотреть на нее и выяснить, для чего это ограничение. И если это ограничение, которое вы определяете, вы можете даже изменить свое отображение, чтобы оно получило разумное имя. Я знаю, что вы можете сделать это с ограничениями внешнего ключа в любом случае.

...