Я работаю в java jpa-приложении Hibernate-search, я знаю индекс Hibernate-search автоматически при каждой аннотации @Id в объекте. Проблема в том, что у меня есть класс «главный домен» с аннотацией @Id, а затем у меня есть другой класс с наследованным «основным доменом», тогда, похоже, что поиск Hibernate не распознает унаследованное поле @Id.
это мой класс основного домена.
@MappedSuperclass
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class MasterDomain<Key extends Object> implements Serializable
{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Key id;
}
У меня есть класс "Language", который наследует этот класс:
@Indexed
@Entity
public class Language extends MasterDomain<Long>{
@Field
private String name;
}
Наконец, у меня есть другой класс с именем "LanguageRelation"который связан с языковым классом. Это выглядит так:
@Indexed
@Entity
public class LanguageRelation extends MasterDomain<Long>{
@IndexedEmbedded
private Language language;
}
Итак, когда я создаю запрос lucene для поиска сущностей LanguageRelation, я могу искать по названию языка следующим образом:
queryBuilder.keyword().onField("language.name").matching(languageName).createQuery()
Но я невозможность поиска по идентификатору языка, например:
queryBuilder.keyword().onField("language.id").matching(languageId).createQuery()
Предыдущий запрос возвращает 0 результатов, как вы можете видеть, похоже, что Hibernate-поиск не распознает @Id, унаследованный от MasterDomain, какое-либо предложение?
UPDATE 1 => Я забыл сказать, что класс MasterDomain находится в отдельном модуле, из которого я пытаюсь выполнить запрос Lucene. Может быть, это может привести к проблеме?
ОБНОВЛЕНИЕ 2 Это полный код того, как я пытаюсь построить свой запрос Lucene.
FullTextEntityManager fullTextEntityManager
= Search.getFullTextEntityManager(entityManager);
org.hibernate.search.query.dsl.QueryBuilder queryBuilder = fullTextEntityManager.getSearchFactory()
.buildQueryBuilder()
.forEntity(LanguageRelation.class)
.get();
Long languageId = 29L;
org.apache.lucene.search.Query query = queryBuilder.keyword().onField("language.id").matching(languageId).createQuery();
org.hibernate.search.jpa.FullTextQuery fullTextQuery
= fullTextEntityManager.createFullTextQuery(query, LanguageRelation.class);
List<LanguageRelation> resultList = fullTextQuery.getResultList();