我正在使用Hibernate 4.3.0.Final / JPA 2.1和Hibernate Search 4.5.0.Final,在WildFly 8.0.0.Final上运行。尽管我的应用程序运行良好,但是在索引创建时,我会收到Hibernate的警告信息。
WARN org.hibernate.loader.Loader - HHH000444:遇到锁请求,但方言报告数据库更喜欢使用单独的选择锁定(后续锁定);在初始查询执行后,结果将被锁定
这是创建索引的方法:
public void createIndex() throws DAOException {
FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(this.entityManager);
try {
fullTextEntityManager.createIndexer(Colaborador.class)
.purgeAllOnStart(Boolean.TRUE)
.optimizeOnFinish(Boolean.TRUE)
.startAndWait();
}
catch (InterruptedException e) {
logger.error("Error creating index", e);
throw new DAOException(e);
}
}
我做了一些搜索,找到了一种“解决方案”,或者更好地说是消除警告的方法。然而,我不知道这是否是最佳解决方案。该解决方案建议扩展org.hibernate.dialect.Oracle10gDialect
并覆盖方法public boolean useFollowOnLocking()
以返回false
。
另一个重要的事情:这仅发生在Hibernate版本4.2.0.Final之后。在此版本之前,不存在useFollowOnLocking()
方法。
新的方言:
import org.hibernate.dialect.Oracle10gDialect;
public class MyOracle10gDialect extends Oracle10gDialect {
@Override
public boolean useFollowOnLocking() {
return false;
}
}
我在这里和这里找到了解决方案。同时,还有一个bug报告曾经提到过这个警告,但被拒绝了。目前我没有发现其他可用的解决方案。