假设我有一张这样的桌子:
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 查询,等等。
我的问题是我想不出一个不会对我的 HSQLDB 测试代码造成严重破坏的 HBM 映射文件。我的测试设置是一个典型的 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
?一般有没有更好的方法来做这个映射?我愿意接受任何建议...