使用Hibernate Search查询枚举(枚举)的IndexedEmbedded列表

弗朗切斯科·帕帕尼奥(Francesco Papagno)

我有下面的模型,并且我试图使用Hibernate Search进行全文搜索。

我需要搜索具有UserRole.PROFESSIONIST角色的所有用户的“关于”字段。

这是模型:

@Entity
@Indexed
public class User
{
    @Id
    @GeneratedValue
    Long id;

    ...

    String about;

    @IndexedEmbedded
    @Enumerated(EnumType.STRING)
    @ElementCollection(targetClass = UserRole.class, fetch = FetchType.EAGER)
    @JoinTable(name = "user_roles", joinColumns = {@JoinColumn(name = "user_id")})
    List<UserRole> roles = new ArrayList<>();
}    

这是查询:

List results = new ArrayList<>();

org.apache.lucene.search.Query containText = queryBuilder
    .keyword()
    .onField("about")
    .matching(text)
    .createQuery();

org.apache.lucene.search.Query isProfessionist = queryBuilder
    .keyword()
    .onFields("roles")
    .matching(UserRole.PROFESSIONIST.toString())
    .createQuery();

org.apache.lucene.search.Query query = queryBuilder
    .bool()
    .must(containText)
    .must(isProfessionist)
    .createQuery();

org.hibernate.search.jpa.FullTextQuery jpaQuery = fullTextEntityManager.createFullTextQuery(query, User.class);

results = jpaQuery.getResultList();

当我执行查询时,出现以下错误:

org.hibernate.search.exception.SearchException: Unable to find field roles in com.plusimple.core.models.User

我想做的事可能吗?如果是,我在做什么错?

随机奶牛

由于目标类是枚举,因此您必须在@Field要搜索的属性中添加注释(嵌入完整实体时不需要这样做,因为它们具有自己的可搜索子属性)。

例子:

@IndexedEmbedded
@Field(name="roles", analyze=Analyze.NO, index=Index.YES)
@Enumerated(EnumType.STRING)
@ElementCollection(targetClass = UserRole.class, fetch = FetchType.EAGER)
@JoinTable(name = "user_roles", joinColumns = {@JoinColumn(name = "user_id")})
List<UserRole> roles = new ArrayList<>();

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章