休眠搜索:已配置的子类型

时间:2020-09-22 16:11:00

标签: hibernate lucene hibernate-search

我有三个实体,其中BEntity和CEntity从AEntity扩展

@Entity
@Indexed
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.STRING)
public class AEntity {
    @Id
    private String externalId;
}

@Entity
@Indexed
@DiscriminatorValue("B")
public class BEntity extends AEntity {
    @Field
    private String number;
}

@Entity
@Indexed
@DiscriminatorValue("C")
public class CEntity extends AEntity {
    @Field
    private String number;
}

现在我想搜索数字等于1234的子实体,我尝试使用以下方法,但出现此错误

HSEARCH000331:无法为类型为“ BEntity”的查询建立查询 已配置,也没有任何已配置的子类型。

public void unicity() {
    List<Query> listOfQuery = new ArrayList<>();
   // error in this line
    QueryBuilder queryBuilder1 = getFullTextEntityManager().getSearchFactory().buildQueryBuilder().forEntity(BEntity.class).get();
    QueryBuilder queryBuilder2 = getFullTextEntityManager().getSearchFactory().buildQueryBuilder().forEntity(CEntity.class).get();
    listOfQuery.add(queryBuilder1.keyword().onField("number").matching("1234").createQuery());
    listOfQuery.add(queryBuilder2.keyword().onField("number").matching("1234").createQuery());
}

1 个答案:

答案 0 :(得分:0)

  1. 确保@Indexed批注确实是org.hibernate.search.annotations.Indexed,而不是其他库中的其他批注。
  2. 确保实际上将BEntity检测为一个实体。您是否可以使用Hibernate ORM运行针对此类型的查询?例如。使用JPQL或条件?
  3. 确保您没有禁用休眠搜索,即未将hibernate.search.autoregister_listeners设置为false