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

问题描述

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...