使用每类表策略时如何提高 Hibernate 多态查询的性能?

问题描述

当使用 table per class 策略时,多态查询看起来像这样:

SELECT <some cols> 
FROM 
  (
    SELECT 
      parent_id,entity1_col,entity2_col,1 as clazz_ 
    FROM 
      entity_table1 
    UNION 
    SELECT 
      parent_id,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,1 as clazz_ 
    FROM 
      entity_table1 
    WHERE 
      parent_id=X
    UNION 
    SELECT 
      parent_id,2 as clazz_ 
    FROM 
      entity_table2 
    WHERE 
      parent_id=X
  ) abstract_entity 

在 FROM 的每个请求中都有“WHERE parent_id=X”?这样在获取父实体上的关系时不会出现性能问题。

谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)