2

出于这个问题的目的,我有两个商务课程:

@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 注释参数,但删除这些对根本问题没有影响。我留下的事实是两个类都实现了相同的接口,并且一个包含另一个的列表(尽管请注意这不是@IndexEmbedded)以防万一。

(我还发现一个线程表明线程池大小是一个问题,所以我将它增加到 50 但没有运气)

大概我在做一些明显错误的事情,但我没有想法 - 任何人都可以帮忙吗?

谢谢

4

2 回答 2

1

当数据库连接用完时,它似乎会冻结;它有效地依靠来自数据库池库的连接超时来“释放”死锁。

与其增加线程池,不如降低它以免耗尽连接;每个线程将使用一个。或者,如果可以的话,提高允许的数据库连接的最大数量会更有效。

我已经打开了一个 JIRA 问题以通过某种方式检测它来解决这个问题,最坏的情况下更好地记录它。

于 2012-10-03T23:07:33.060 回答
0

我遇到了同样的问题,并且一一索引实体有所帮助。

fullTextEntityManager.createIndexer(MyClassOne.class).startAndWait();
fullTextEntityManager.createIndexer(MyClassTwo.class).startAndWait();
于 2013-09-24T13:42:48.523 回答