Допустим, у меня есть такая таблица:
CREATE TABLE big_table (UUID varchar(32) not null, ... );
У меня есть запрос к таблице, который я не могу выразить как запрос HQL или Criteria.Я пытаюсь настроить запрос как представление в Oracle, например, так:
CREATE VIEW big_table_view AS SELECT bt.* FROM big_table bt
LEFT OUTER JOIN ...
-- (multicolumn subselect over big_table for some historical stuff)
WHERE ...
Я пытаюсь сопоставить один и тот же класс Java и с таблицей, и с представлением.Это было бы здорово, потому что тогда я мог бы выполнять одинаковые запросы Criteria для обоих и т. Д.
Моя проблема в том, что я не могу создать файл отображения HBM, который не наносит ущерб моему тесту HSQLDBкод.Моя тестовая установка - это типичная тестовая установка Maven / Spring с hibernate.hbm2ddl.auto
, установленным на create-drop
, так что Hibernate создает схему HSQLDB на лету для тестирования.
Мой файл отображения в настоящее время выглядит следующим образом:
<hibernate-mapping>
<class name="com.example.BigPojo" entity-name="bigPojo"
table="big_table">
&commonPropertiesEntity;
</class>
<class name="com.example.BigPojo" entity-name="bigPojoView"
table="big_table_view">
&commonPropertiesEntity;
</class>
</hibernate-mapping>
... когда я запускаю свои тесты, они взрываются повсюду, потому что HSLQDB пытается создать таблицу с именем big_table_view
со всеми теми же ограничениями внешнего ключа, индексами и т. Д. Я пытаюсьисправить схему после того, как она была создана с помощью элемента database-object
, например:
<database-object>
<create>
DROP TABLE big_table_view CASCADE;
CREATE VIEW big_table_view...
</create>
<drop>
DROP VIEW big_table_view IF EXISTS;
</drop>
<dialect-scope name="org.hibernate.dialect.HSQLDialect" />
</database-object>
... но все еще что-то ломается, и я все еще пытаюсь разобраться.Есть ли способ сообщить Hibernate об исключении сущности bigPojoView
из hbm2ddl
?Есть ли лучший способ сделать это отображение вообще?Я открыт для любых советов ...