2017-02-15 15 views
3

Мой код имеет класс 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) 
+1

Какая версия поиска в спящем режиме? Возможно, это проблема, которая уже решена. – Sanne

+2

Версия 5.7.0.CR1, ожидая 5.7.0. Исходная версия. Спасибо Санне. Я следую вашим сообщениям в http://in.relation.to/sanne-grinovero/index.html. – adyjr

+1

Я только что подтвердил, что это ошибка. Мы будем работать над этим, спасибо: https://hibernate.atlassian.net/browse/HSEARCH-2587 –

ответ

 Смежные вопросы

  • Нет связанных вопросов^_^