Java MassIndexer.createIndexer()在索引多个实体类型时冻结
就本问题而言,我有两个商业课程:Java MassIndexer.createIndexer()在索引多个实体类型时冻结,java,hibernate,lucene,hibernate-search,Java,Hibernate,Lucene,Hibernate Search,就本问题而言,我有两个商业课程: @Entity @Indexed public class MyClassOne implements MyInterface { @Id private Integer id; @OneToMany(orphanRemoval = true) @Cascade(CascadeType.ALL) private List<MyClassTwo> myClassTwos; @Field pr
@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;
}
然后,我使用以下代码创建索引(如Hibernate搜索文档中所建议的):
问题是,它冻结了。createIndexer()无限期地挂起,我什么也做不到
如果我删除了其中一个类参数,那么剩余的类将被索引,并且一切都可以完美地工作——当我试图同时索引这两个实体时,这只是一个问题。我的理解是,默认情况下,hibernate会为每个实体创建一个单独的索引,我当然没有做任何配置来改变这一点
为清楚起见,我删除了@AnalyzerDef、@Boost注释以及@Field和@Indexed注释参数,但删除这些参数对根本问题没有影响。我留下的事实是,两个类都实现了相同的接口,其中一个类包含另一个类的列表(尽管请注意,这不是@IndexEmbedded),以防相关
(我还发现一个线程表明线程池大小是个问题,所以我将其增加到50,但运气不好)
想必我做错了什么,但我没有主意——有人能帮我吗
谢谢当数据库连接用完时,它可能会冻结;它依靠数据库池库的连接超时来“释放”,从而有效地实现死锁 与其增加线程池,不如降低线程池,以免耗尽连接;每个线程将使用一个。或者,如果可以,提高到数据库的最大允许连接数会更有效
我已经打开了一个JIRA问题,通过某种方式检测它来解决这个问题,最坏的情况是更好地记录它。我遇到了同样的问题,索引实体一个接一个地帮助解决了这个问题
fullTextEntityManager.createIndexer(MyClassOne.class).startAndWait();
fullTextEntityManager.createIndexer(MyClassTwo.class).startAndWait();
Search.getFullTextSession(session).createIndexer(MyClassOne.class, MyClassTwo.class).startAndWait();
fullTextEntityManager.createIndexer(MyClassOne.class).startAndWait();
fullTextEntityManager.createIndexer(MyClassTwo.class).startAndWait();