Jpa 从任何索引实体休眠搜索
我正在使用Hibernate搜索来搜索Jboss应用程序中的数据。我有3个JPA实体类,它们都扩展了BaseEntity类,每个都由Lucene索引。例如:Jpa 从任何索引实体休眠搜索,jpa,hibernate-search,Jpa,Hibernate Search,我正在使用Hibernate搜索来搜索Jboss应用程序中的数据。我有3个JPA实体类,它们都扩展了BaseEntity类,每个都由Lucene索引。例如: @MappedSuperclass public abstract class BaseEntity implements Serializable { @Temporal(TemporalType.TIMESTAMP) private Date created; public abstract Long getId
@MappedSuperclass
public abstract class BaseEntity implements Serializable {
@Temporal(TemporalType.TIMESTAMP)
private Date created;
public abstract Long getId();
}
@Entity
@Table(name = "DVD")
public class Dvd extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Field
private String title;
}
@Entity
@Table(name = "BOOK")
public class Book extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Field
private String author;
}
现在我想通过通配符搜索查询来搜索DVD标题或书籍作者,并以列表的形式获取结果列表。这就是我到目前为止所拥有的:
public List<BaseEntity> search(String query, int firstResult, int maxResults) {
List<BaseEntity> results = null;
FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(em);
Query luceneQuery = new WildcardQuery(new Term("*", "*" + query + "*"));
FullTextQuery fullTextQuery = fullTextEntityManager.createFullTextQuery(luceneQuery, BaseEntity.class);
fullTextQuery.setFirstResult(firstResult);
fullTextQuery.setMaxResults(maxResults);
results = fullTextQuery.getResultList();
return results;
}
公共列表搜索(字符串查询、int firstResult、int maxResults){
列表结果=空;
FullTextEntityManager FullTextEntityManager=Search.getFullTextEntityManager(em);
Query luceneQuery=新的通配符查询(新术语(“*”,“*”+Query+“*”);
FullTextQuery FullTextQuery=fullTextEntityManager.createFullTextQuery(luceneQuery,BaseEntity.class);
fullTextQuery.setFirstResult(firstResult);
fullTextQuery.setMaxResults(maxResults);
结果=fullTextQuery.getResultList();
返回结果;
}
但是我没有得到任何结果。如何才能让它工作,或者没有为每个实体使用buildQueryBuilder的方法?谢谢 您需要对类使用varargs样式的方法,如下所示:
FullTextQuery fullTextQuery = fullTextEntityManager.createFullTextQuery(luceneQuery, DVD.class, Book.class);
这是因为当Hibernate Search创建搜索查询时,它会将类名添加到查询中(对于_Hibernate_class字段,它是索引类的名称)