gpt4 book ai didi

java - 我可以在不破坏我的自动化测试的情况下在 Hibernate 中映射一个表和同一个表的 View 吗?

转载 作者:行者123 更新时间:2023-11-28 20:46:33 24 4
gpt4 key购买 nike

假设我有一个这样的表:

CREATE TABLE big_table (UUID varchar(32) not null, ... );

我对表有一个查询,但我无法将其表示为 HQL 或条件查询。我正在尝试将查询设置为 Oracle 中的 View ,如下所示:

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 类映射到表和 View 。那真的很酷,因为这样我就可以对两者运行相同的 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 从 hbm2ddl 中排除 bigPojoView 实体?通常有更好的方法来进行这种映射吗?我愿意接受任何建议...

最佳答案

没有简单的方法可以从 hbm2ddl 中排除表。但是,您可以通过 Hibernate 的子选择映射您的 View :see footnote #20 under 5.1.1 .

类似于:

<class name="com.example.BigPojo" entity-name="bigPojoView"
<subselect>
... your view definition here ...
</subselect>
<synchronize table="big_table"/>
<id name="UUID"/>
...
</class>

关于java - 我可以在不破坏我的自动化测试的情况下在 Hibernate 中映射一个表和同一个表的 View 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7601025/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com