Мое приложение только считывает данные из базы данных. Нет операций создания/обновления/удаления. Я пытаюсь сопоставить одно представление БД с сущностью JPA. В этом представлении нет уникальных идентификаторов. Таким образом, каждая строка уникальна. Но есть вероятность, что значение некоторых столбцов может быть нулевым.JPA DBUnit HsqlDb: отключить проверки ограничений?
Теперь проблема заключается в том, что:
1) Я не могу делать какие-либо изменения в database.Its из моей области. Таким образом, представление не может быть добавлено с новым столбцом для уникального идентификатора.
2) Я не могу создать объект JPA без первичного ключа, так как он будет жаловаться на то, что он по крайней мере требует уникального уникального ключа.
3) Если я применяю аннотацию @Id ко всем столбцам, то она логически имеет смысл, поскольку каждая строка уникальна в моем случае. Но во время моего модульного тестирования HSQLDB будет жаловаться, что некоторые уникальные столбцы могут не иметь нулевого значения.
4) Поэтому я решил отложить/отключить все ограничения. Поскольку в моем случае ограничения рассматриваются только во время создания схемы в памяти с использованием DBUnit и HsqlDb.
Я попытался выполнить следующее подготовленное заявление:
SET CONSTRAINTS ALL DEFERRED
Но он терпит неудачу с ошибкой:
Caused by: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: CONSTRAINTS
Я не уверен, как отключить проверку ограничений во время начальной инициализации БД. Я уже отключил проверки внешнего ключа в прошлом, используя:
SET DATABASE REFERENTIAL INTEGRITY FALSE
И он работает без каких-либо проблем. Пожалуйста, дайте мне знать, если у вас есть идея о том, как отключить все проверки ограничений для HsqlDb.
Jar Версии:
DbUnit - 2.5.0
Junit - 4.10
HSQLDB 2.3.0
JDK - 1,7
Обновление 1:
Я обновил m y Версия hsqlDb jar до 2.3.4. Я нашел folowing ссылка:
http://hsqldb.org/doc/guide/dbproperties-chapt.html#N155DE
Затем я попытался выполнить эти заявления на подключение первоначально:
SET DATABASE SQL UNIQUE NULLS { TRUE | FALSE }
Но это не помогло.
Update 2:
Я попытался установить эти столбцы явно обнулить с помощью:
ALTER TABLE T_NAME ALTER COLUMN C_NAME SET NULL
Но я получаю ошибку о том, что:
column is in primary key in statement [ALTER TABLE T_NAME ALTER COLUMN C_NAME SET NULL]
Как это проблема, если вы только читаете из базы данных? Если вы никогда не пишете, то почему «HSQLDB жалуется, что некоторые уникальные столбцы могут не иметь нулевого значения *»? –
@a_horse_with_no_name: Проблема в том, что я пишу юниты с использованием фреймворка DbUnit и HsqlDb в качестве моей базы данных в памяти. Прежде чем мой тест будет выполнен, он возьмет мой объект JPA и попытается создать в базе данных памяти, используя это. После создания базы данных она пытается вставить данные в каждую таблицу (здесь представление рассматривается как таблица). И тогда HsqlDb жалуется на нарушение ограничений.FYI, данные, которые являются insrted, извлекаются ранее из реальной реальной базы данных и сохраняются как файлы xml. – user613114