Използвам Hibernate 4.3.0.Final / JPA 2.1, Hibernate Search 4.5.0.Final работи на WildFly 8.0.0.Final. Приложението ми работи абсолютно добре, но получавам това предупреждение за хибернация, когато се създават индексите.
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;
}
}
Намерих това решение тук и тук. Има и доклад за грешка, който беше отхвърлен за това предупреждение. Не намерих друго налично решение за това предупреждение.