Java Hibernate搜索-MySQL错误使用联接继承模型的联接太多

Java Hibernate搜索-MySQL错误使用联接继承模型的联接太多,java,mysql,hibernate,hibernate-search,Java,Mysql,Hibernate,Hibernate Search,我刚刚在我的web应用程序中遇到以下MySQL错误 Too many tables; MySQL can only use 61 tables in a join 这是在执行Hibernate搜索(5.5.2版)查询时发生的,我不完全确定为什么需要这么多联接。以下是我的实体模型的简化示例: @Entity @Inheritance(strategy = InheritanceType.JOINED) public class Profile { Integer id; @Ma

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

Too many tables; MySQL can only use 61 tables in a join
这是在执行Hibernate搜索(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的示例

选择*
从配置文件根
左外部联接BusinessProfile在root.id上联接1=联接1.id
root.id=JOIN_2.id上的左外部JOIN UserProfile JOIN_2
左外部联接关系根上的一个联接\u 3.x=联接\u 3.x
左外部联接关系两个联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接
左外部联接关系三个联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接联接
其中root.id位于(…)
在这个简化的例子中,有5个连接。如果我是在父类
概要文件
上执行查询,这将是有意义的。但是,我已经将子类
UserProfile
传递给
createFullTextQuery
方法,因此我希望生成的SQL看起来更像这样:

选择*
从用户配置文件根
左外部联接配置文件root.id上的联接\u 1=联接\u 1.id
左外部联接关系实体联接1.x上的一个联接2=联接2.x
左外部联接关系根上的三个联接\u 3.x=联接\u 3.x
其中root.id位于(…)

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

我确认这是Hibernate搜索中的一个错误。这是我刚刚创建的JIRA:

我已经写了一个补丁,但我必须去,没有时间去清理它;今天晚些时候我会发布一个公关

感谢您发现这个问题


更新我们在5.5.4中修复了它。最终版本:

感谢您发布这篇文章,我们没有想到优化深层继承,但显然这是个好主意!Guillaume下面的补丁看起来不错,我们将很快合并它并发布一个夜间构建,您可以尝试。该补丁已合并,CI需要完成测试,并将在大约2小时内发布一个夜间构建。如果您想尝试,请确保启用JBoss Maven存储库,以便能够下载它,例如,使用感谢@Sanne和Guillaume快速修补它!