当使用每类表策略时,多态查询如下所示:
SELECT <some cols>
FROM
(
SELECT
parent_id,
entity1_col,
entity2_col,
1 as clazz_
FROM
entity_table1
UNION
SELECT
parent_id,
entity1_col,
entity2_col,
2 as clazz_
FROM
entity_table2
) abstract_entity
WHERE
abstract_entity.parent_id = X
我们可以看到,如果 entity_table1 和 entity_table2 中有很多行,则此查询可能会导致性能问题。
我正在使用 Spring-data & Hibernate,并且在获取父实体上的 OneToMany 关系时会生成此请求。
我的问题是:为什么 Hibernate 会生成这样的请求,尽管它限制了 entity_table1 和 entity_table2 共有的 parent_id 上的选定行?
有没有办法让 Hibernate 生成如下所示的 SQL 请求:
SELECT <some cols>
FROM
(
SELECT
parent_id,
entity1_col,
entity2_col,
1 as clazz_
FROM
entity_table1
WHERE
parent_id=X
UNION
SELECT
parent_id,
entity1_col,
entity2_col,
2 as clazz_
FROM
entity_table2
WHERE
parent_id=X
) abstract_entity
在 FROM 的每个请求中都有“WHERE parent_id=X”?这样在获取父实体上的关系时不会出现性能问题。
谢谢 !