massindexer.createindexer()在索引多个实体类型时冻结

cx6n0qe3  于 2021-07-09  发布在  Java
关注(0)|答案(2)|浏览(398)

就这个问题而言,我有两个商业课程:

@Entity
@Indexed
public class MyClassOne implements MyInterface {

    @Id
    private Integer id;

    @OneToMany(orphanRemoval = true)
    @Cascade(CascadeType.ALL)
    private List<MyClassTwo> myClassTwos;

    @Field
    private String someField;
}

@Entity
@Indexed
public class MyClassTwo implements MyInterface {

    @Id
    private Integer id;

    @Field
    private String someField;
}

然后使用以下代码创建索引(如hibernate搜索文档中所建议的):

Search.getFullTextSession(session).createIndexer(MyClassOne.class, MyClassTwo.class).startAndWait();

问题是,它冻结了。massindexer.createindexer()无限期挂起,我什么也找不到。
如果我删除了任何一个类参数,那么剩下的类就被索引了,所有的工作都很完美——当我试图同时索引这两个实体时,这只是一个问题。我的理解是,hibernate在默认情况下为每个实体创建一个单独的索引,我当然没有做任何配置来改变这一点。
为清楚起见,我删除了@analyzerdef、@boost注解以及@field和@indexed注解参数,但删除这些参数对根本问题没有影响。我留下的事实是,两个类都实现了相同的接口,其中一个类包含另一个类的列表(尽管请注意,这不是@indexembedded),以防相关。
(我还发现一个线程表明线程池大小是一个问题,所以我将其增加到50,但运气不好)
想必我做错了什么,但我没有主意了,有人能帮我吗?
谢谢

lb3vh1jj

lb3vh1jj1#

我也遇到了同样的问题,索引实体一个接一个的帮助了我。

fullTextEntityManager.createIndexer(MyClassOne.class).startAndWait();
fullTextEntityManager.createIndexer(MyClassTwo.class).startAndWait();
7lrncoxx

7lrncoxx2#

当数据库连接用完时,它可能会冻结;它依赖于数据库池库的连接超时来“释放”,从而有效地死锁。
与其增加线程池,不如降低线程池,以免耗尽连接;每个线程将使用一个。或者,如果可以的话,提高到数据库的最大允许连接数会更有效。
我已经打开了一个jira问题来解决这个问题,通过某种方式检测它,最坏的情况下更好地记录它。

相关问题