Мой код имеет класс Credenciada, который наследует от класса Cadastro, который имеет atributte (вложенный класс) «ВИС» в КЭП типа. Класс CEP имеет атрибут «uf» от Строка Тип.не @SortableField работает в вложенной сущности
uf atributte был аннотирован с @SortableField, поэтому индекс сохраняется с именем «cep.uf». Но когда мне нужно сортировать по «cep.uf», генерируется исключение NullPointerException, потому что Hibernate-search не нашел этот индекс/атрибут.
OBS: Я видел, что атрибут «allFieldDescriptors» класса IndexedTypeDescriptorImpl не имел «cep.uf» ocurrency. Потому что в строке 139 этого метода возвращается null в этот момент «return allFieldDescriptors.get (fieldName)».
Cadastro.java:
@Entity
@Table(name = "CAD")
@Inheritance(strategy = InheritanceType.JOINED)
@Indexed
public class Cadastro extends Entidade<Long> {
@Id
private Long codigo;
@IndexedEmbedded
@NotAudited
@ManyToOne
private CEP cep;
//more attrs and getters/setters here
}
Credenciada.java:
@Entity
@Indexed
@Table(name = "CAD_CRDC")
@PrimaryKeyJoinColumn(name = "CD_CAD_CRDC")
public class Credenciada extends Cadastro {
//many attrs and getters/setters here
}
CEP.java
@Entity
@Table(name = "CAD_CEP", schema = "dne")
public class CEP extends Entidade<Long> {
@Id
@Field(name = "cep", store = Store.YES)
private Long nrCep;
@SortableField
@Field(store = Store.YES)
private String uf;
}
код Поиск:
FullTextEntityManager fullTextEntityManager = hibernateUtil.getFullTextEntityManager();
QueryBuilder qb = HibernateSearchUtil.createQueryBuilder(fullTextEntityManager, Credenciada.class);
BooleanJunction<?> criterios = qb.bool();
//many conditions here...
org.apache.lucene.search.Query rootQuery = criterios.isEmpty() ? new MatchAllDocsQuery() : criterios.createQuery();
FullTextQuery query = fullTextEntityManager.createFullTextQuery(rootQuery, Credenciada.class);
query.setSort(qb.sort().byField("cep.uf").createSort());
List resultList = query.getResultList();
Исключение:
java.lang.NullPointerException
at org.hibernate.search.query.dsl.sort.impl.SortFieldStates.getCurrentSortFieldTypeFromMetamodel(SortFieldStates.java:156)
at org.hibernate.search.query.dsl.sort.impl.SortFieldStates.determineCurrentSortFieldTypeAutomaticaly(SortFieldStates.java:149)
at org.hibernate.search.query.dsl.sort.impl.ConnectedSortContext.byField(ConnectedSortContext.java:42)
at br.gov.sindec.modulos.credenciada.repositorio.impl.CredenciadaRepositorioImpl.criarQueryListarCredenciadasIndexadas(CredenciadaRepositorioImpl.java:124)
at br.gov.sindec.modulos.credenciada.repositorio.impl.CredenciadaRepositorioImpl.listarCredenciadasIndexadas(CredenciadaRepositorioImpl.java:52)
Какая версия поиска в спящем режиме? Возможно, это проблема, которая уже решена. – Sanne
Версия 5.7.0.CR1, ожидая 5.7.0. Исходная версия. Спасибо Санне. Я следую вашим сообщениям в http://in.relation.to/sanne-grinovero/index.html. – adyjr
Я только что подтвердил, что это ошибка. Мы будем работать над этим, спасибо: https://hibernate.atlassian.net/browse/HSEARCH-2587 –