就这个问题而言,我有两个商业课程:
@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,但运气不好)
想必我做错了什么,但我没有主意了,有人能帮我吗?
谢谢
2条答案
按热度按时间lb3vh1jj1#
我也遇到了同样的问题,索引实体一个接一个的帮助了我。
7lrncoxx2#
当数据库连接用完时,它可能会冻结;它依赖于数据库池库的连接超时来“释放”,从而有效地死锁。
与其增加线程池,不如降低线程池,以免耗尽连接;每个线程将使用一个。或者,如果可以的话,提高到数据库的最大允许连接数会更有效。
我已经打开了一个jira问题来解决这个问题,通过某种方式检测它,最坏的情况下更好地记录它。