问题描述
我有三个实体,其中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的子实体,我尝试使用以下方法,但出现此错误
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());
}
解决方法
- 确保
@Indexed
批注确实是org.hibernate.search.annotations.Indexed
,而不是其他库中的其他批注。 - 确保实际上将
BEntity
检测为一个实体。您是否可以使用Hibernate ORM运行针对此类型的查询?例如。使用JPQL或条件? - 确保您没有禁用休眠搜索,即未将
hibernate.search.autoregister_listeners
设置为false
。