出于这个问题的目的,我有两个业务类:
@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文档中所建议的那样):
Search.getFullTextSession(session).createIndexer(MyClassOne.class, MyClassTwo.class).startAndWait();
问题是,这冻结了。 MassIndexer.createIndexer()无限期挂起,我无处可去。
如果我删除任何一个Class参数,那么剩下的类被索引并且一切正常 - 当我尝试同时索引这两个实体时,这只是一个问题。我的理解是hibernate默认为每个实体创建一个单独的索引,我当然没有做任何配置来改变它。
为了清楚起见,我删除了@ AnalyzerDef,@ Boost注释以及@Field和@Indexed注释参数,但删除这些参数对底层问题没有任何影响。我留下了这样一个事实:两个类都实现了相同的接口,并且一个包含另一个的List(尽管注意这不是@IndexEmbedded),以防它相关。
(我也发现一个线程暗示线程池大小是一个问题所以我把它增加到50但没有运气)
据推测,我做的事情显然是错误的,但我没有想法 - 任何人都可以帮忙吗?
由于
答案 0 :(得分:1)
当数据库连接耗尽时,它似乎会冻结;它实际上是死锁,它依赖于从数据库池库到#34;获得免费的连接超时&#34;。
不要增加线程池,而应该降低它,以免耗尽你的连接;每个线程都将使用一个。或者,如果您可以更有效地提高与数据库的最大允许连接数。
我已经打开了一个JIRA问题,通过某种方式检测它来解决这个问题,最糟糕的情况是文档更好。
答案 1 :(得分:0)
我有同样的问题,索引实体一个接一个帮助。
fullTextEntityManager.createIndexer(MyClassOne.class).startAndWait();
fullTextEntityManager.createIndexer(MyClassTwo.class).startAndWait();