列表@IndexedEmbedded 中的搜索字段
search field in List @IndexedEmbedded
我有一个包含实体列表的实体,我在此列表中添加了 @IndexedEmbedded
以便能够搜索到它。所以我想搜索 ID 为 123 且属性 x 等于给定值的所有实体。我尝试使用下面的代码,但出现此错误
Unable to find field bEntity.x in com.xx.xx.AEntity
@Entity
@Indexed
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class AEntity implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Field
private String id;
@IndexedEmbedded
@ElementCollection
private Set<BEntity> bEntity;
}
@Entity
@IdClass(BPK.class)
public class BEntity implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Field(name = "x_number")
private String x;
@Id
@Field(name = "y_number")
private String y;
}
QueryBuilder queryBuilder = getFullTextEntityManager().getSearchFactory().buildQueryBuilder().forEntity(AEntity.class).get();
Query query = queryBuilder.bool()
.must(queryBuilder.keyword().onField("id").matching("123").createQuery())
.must(queryBuilder.keyword().onField("bEntity.x").matching(str).createQuery())
.createQuery();
您的字段名为 bEntity.x_number
,而不是 bEntity.x
:
@Field(name = "x_number")
这就是您收到此错误的原因。
在您的查询中使用 bEntity.x_number
而不是 bEntity.x
,您应该没问题。
我有一个包含实体列表的实体,我在此列表中添加了 @IndexedEmbedded
以便能够搜索到它。所以我想搜索 ID 为 123 且属性 x 等于给定值的所有实体。我尝试使用下面的代码,但出现此错误
Unable to find field bEntity.x in com.xx.xx.AEntity
@Entity
@Indexed
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class AEntity implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Field
private String id;
@IndexedEmbedded
@ElementCollection
private Set<BEntity> bEntity;
}
@Entity
@IdClass(BPK.class)
public class BEntity implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Field(name = "x_number")
private String x;
@Id
@Field(name = "y_number")
private String y;
}
QueryBuilder queryBuilder = getFullTextEntityManager().getSearchFactory().buildQueryBuilder().forEntity(AEntity.class).get();
Query query = queryBuilder.bool()
.must(queryBuilder.keyword().onField("id").matching("123").createQuery())
.must(queryBuilder.keyword().onField("bEntity.x").matching(str).createQuery())
.createQuery();
您的字段名为 bEntity.x_number
,而不是 bEntity.x
:
@Field(name = "x_number")
这就是您收到此错误的原因。
在您的查询中使用 bEntity.x_number
而不是 bEntity.x
,您应该没问题。