Hibernate-search:未通过在hibernate-search中以编程方式注册字段的方式在弹性搜索中注册基类字段

问题描述 投票:0回答:1

我在基类中声明了某些字段,并且我只想为某些子类(实体)注册这些字段。

因此,我不想用@Field注释基类中的那些字段,尽管仅通过编程方式为某些实体注册就足够了。

但是在基本实体中声明的字段未注册/映射到弹性搜索,如果尝试搜索,它将抛出以下异常。

我也尝试过将这些字段移到实体本身,而不是在基类中声明它并以编程方式注册这些字段,这对我来说是有效的,因此,仅当这些字段在基类中不起作用时。

这是我的示例代码

public class BaseEntity{

@Column(name = "created_timestamp")
private String createdBy;

@Column(name = "created_by")
private ZonedDateTime createdTimeStamp;

//getter and setter

}
@Entity
@Indexed    
public class BookEntity extends BaseEntity{

//other fields
}
@Entity
@Indexed
public class BookEntity extends BaseEntity{

//other fields
}
public class HibernateSearchFieldMappingService{

@Autowired
private SearchMapping searchMapping;

 @Override
  public <T extends BaseEntity> void registerAuditFields(Class<T> entityClass) {
    LOG.info("Registering audit fields (createdTimeStamp and createdBy) of entity {}", entityClass);
    IndexedMapping indexedMapping = searchMapping.entity(entityClass).indexed();
    FieldMapping fieldMapping = indexedMapping.property("createdTimeStamp", ElementType.FIELD).field();
    fieldMapping.dateBridge(Resolution.SECOND);
    fieldMapping.sortableField();
    indexedMapping.entity(entityClass).indexed().property("createdBy", ElementType.FIELD).field().normalizer("lowercase");
  }

  }

这是我的堆栈跟踪信息

org.hibernate.search.exception.SearchException: Unable to find field createdBy in com.*.*.*.BookEntity
    at org.hibernate.search.engine.spi.DocumentBuilderIndexedEntity.objectToString(DocumentBuilderIndexedEntity.java:1052)
    at org.hibernate.search.query.dsl.impl.FieldContext.objectToString(FieldContext.java:75)
    at org.hibernate.search.query.dsl.impl.ConnectedMultiFieldsTermQueryBuilder.buildSearchTerm(ConnectedMultiFieldsTermQueryBuilder.java:149)
    at org.hibernate.search.query.dsl.impl.ConnectedMultiFieldsTermQueryBuilder.createQuery(ConnectedMultiFieldsTermQueryBuilder.java:113)
    at org.hibernate.search.query.dsl.impl.ConnectedMultiFieldsTermQueryBuilder.createQuery(ConnectedMultiFieldsTermQueryBuilder.java:72)

我使用的休眠版本是,

hibernate-search-elasticsearch,hibernate-search-orm = 5.11.4.Final

java hibernate elasticsearch hibernate-search elasticsearch-5
1个回答
0
投票
@Column(name = "created_timestamp")
private String createdBy;

@Column(name = "created_by")
private ZonedDateTime createdTimeStamp;

应该不是

@Column(name = "created_timestamp")
private String createdTimeStamp;;

@Column(name = "created_by")
private ZonedDateTime createdBy

另一个假设**列名是created_by而不是createdBy

© www.soinside.com 2019 - 2024. All rights reserved.