【发布时间】:2020-04-20 06:10:00
【问题描述】:
我已经将hibernate从5.1.17升级到5.4.11,同时我也升级了hibernate search和lucene。以下是详细内容
Hibernate: 5.1.17 to 5.4.11
Hibernate-search-orm: 5.5.2 to 5.11.5
Lucene: 5.3.1 to 5.5.5
我在AbstractSessionImpl.class.getDeclaredField("factory"); 收到java.lang.NoSuchFieldException: factory 错误
这是什么原因?
Hibernate-search-orm 和 Lucene 对于 hibernate 5.4.11 的建议/兼容是什么??
编辑:这是导致问题的地方,并且此代码存在很长时间。 我在运行测试用例时遇到了这个问题,它指向我们代码中的以下方法。
private Set<String> getAllQueryNames() {
Set<String> queryNames = Sets.newHashSet();
try {
Field factoryField = AbstractSessionImpl.class.getDeclaredField("factory");
factoryField.setAccessible(true);
SessionFactoryImpl factory = (SessionFactoryImpl) factoryField.get(getSessionFactory().getCurrentSession());
Field namedQueriesField = SessionFactoryImpl.class.getDeclaredField("namedQueryRepository");
namedQueriesField.setAccessible(true);
NamedQueryRepository namedQueryRepository = (NamedQueryRepository) namedQueriesField.get(factory);
Field namedQueryDefinitionMapField = NamedQueryRepository.class.getDeclaredField("namedQueryDefinitionMap");
namedQueryDefinitionMapField.setAccessible(true);
Map namedQueryDefinitionMap = (Map) namedQueryDefinitionMapField.get(namedQueryRepository);
queryNames.addAll(namedQueryDefinitionMap.keySet());
} catch (SecurityException e) {
throw new RuntimeException(e);
} catch (NoSuchFieldException e) {
throw new RuntimeException(e);
} catch (IllegalArgumentException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
return queryNames;
}
【问题讨论】:
标签: hibernate lucene hibernate-search