У меня есть простой код, который проверяет поисковую систему в Infinispan.Конфигурация отображения поиска наследования Infinispan
public class InifinispanTest {
private static class DemoA {
private Long id;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
}
private static class DemoB extends DemoA {
private String value;
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
public static void main(String[] args) throws IOException {
SearchMapping mapping = new SearchMapping();
mapping.entity(DemoB.class).indexed().providedId()
.property("id", ElementType.METHOD).field();
Properties properties = new Properties();
properties.put(org.hibernate.search.Environment.MODEL_MAPPING, mapping);
properties.put("hibernate.search.default.directory_provider", "ram");
properties.put("hibernate.search.default.indexmanager", "near-real-time");
Configuration infinispanConfiguration = new ConfigurationBuilder()
.indexing()
.enable()
.indexLocalOnly(true)
.withProperties(properties)
.loaders().passivation(true).addFileCacheStore()
.build();
DefaultCacheManager cacheManager = new DefaultCacheManager(infinispanConfiguration);
final Cache<Integer, DemoB> cache = cacheManager.getCache();
for (int i = 0; i < 10000; i++) {
final DemoB demo = new DemoB();
demo.setId((long) i);
cache.put(i, demo);
}
final SearchManager searchManager = Search.getSearchManager(cache);
final QueryBuilder queryBuilder = searchManager.buildQueryBuilderForClass(DemoB.class).get();
final Query query = queryBuilder.keyword().onField("id").matching(1000l).createQuery();
final CacheQuery query1 = searchManager.getQuery(query, DemoB.class);
for (Object result : query1.list()) {
System.out.println(result);
}
}
}
Как вы можете видеть, что есть базовый класс DemoA и его подкласс дембеля. Я хотел бы выполнить поиск по файлу id суперкласса. Однако этот демо-код генерирует org.hibernate.search.SearchException: Unable to find field id in com.genesis.inifispan.InifinispanTest$DemoB
Я предполагаю, что я пропустил конфигурацию наследования в конфигурации сопоставления поиска, однако, просматривая документацию, я ничего не нашел. Я хотел бы иметь конфигурацию на основе Java, потому что я не могу изменить класс сущности в производственной среде.
Пожалуйста, не могли бы вы помочь мне с настройкой или напрямую поправить мои права на чтение документации.
Эта конфигурация позволяет наследование. Благодарю. BTW, id = 1000 в кеше, вызывают мой цикл за 10'000 ;-) –
hooo right :) Я поправлю ответ – Sanne