gpt4 book ai didi

java - Hibernate Search - MySQL 错误太多与连接继承模型连接

转载 作者:可可西里 更新时间:2023-11-01 08:10:07 26 4
gpt4 key购买 nike

我刚刚在我的网络应用程序中遇到了以下 MySQL 错误

Too many tables; MySQL can only use 61 tables in a join

这是在执行 Hibernate Search(版本 5.5.2)查询时发生的,我不完全确定为什么需要那么多联接。这是我的实体模型的一个简化示例:

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class Profile {
Integer id;

@ManyToOne
RelatedEntityOne joinOne;
}

@Indexed
@Entity
public class BusinessProfile extends Profile {
@ManyToOne
RelatedEntityTwo joinTwo;
}

@Indexed
@Entity
public class UserProfile extends Profile {
@ManyToOne
RelatedEntityThree joinThree;
}

这是执行查询的代码

FullTextEntityManager ftem = Search.getFullTextEntityManager(em);
FullTextQuery fullTextQuery = ftem.createFullTextQuery(myQuery, UserProfile.class);
List result = fullTextQuery.getResultList();

这里是生成的 SQL 的示例

SELECT * 
FROM Profile root
LEFT OUTER JOIN BusinessProfile join_1 ON root.id = join_1.id
LEFT OUTER JOIN UserProfile join_2 ON root.id = join_2.id
LEFT OUTER JOIN RelatedEntityOne join_3 ON root.x = join_3.x
LEFT OUTER JOIN RelatedEntityTwo join_4 ON join_1.x = join_4.x
LEFT OUTER JOIN RelatedEntityThree join_5 ON join_2.x = join_5.x
WHERE root.id IN (...)

所以在这个简化的例子中有 5 个连接。如果我在父类 Profile 上执行查询,这会很有意义。但是,我已将子类 UserProfile 传递给 createFullTextQuery 方法,因此我希望生成的 SQL 看起来更像这样:

SELECT * 
FROM UserProfile root
LEFT OUTER JOIN Profile join_1 ON root.id = join_1.id
LEFT OUTER JOIN RelatedEntityOne join_2 ON join_1.x = join_2.x
LEFT OUTER JOIN RelatedEntityThree join_3 ON root.x = join_3.x
WHERE root.id IN (...)

我不确定这是否是 Hibernate、Hibernate Search、我自己的代码的问题,或者是否没有问题并且一切都按预期运行。鉴于我们已经确定要使用哪个子表,我看不出有任何理由将它加入兄弟表。

最佳答案

我确认这是 Hibernate Search 中的错误。这是我刚刚创建的 JIRA:https://hibernate.atlassian.net/browse/HSEARCH-2301 .

我已经编写了修复程序,但我必须离开并且没有时间清理它;我将在今天晚些时候发布 PR。

感谢您发现这个问题!

更新 我们在 5.5.4 中修复了它。最终:http://in.relation.to/2016/06/29/Polishing-Polishing-And-More-Polishing-Hibernate-Search-5-5-4-Final/

关于java - Hibernate Search - MySQL 错误太多与连接继承模型连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37894280/

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