如何使用hibernate lucene搜索具有多对一关系的实体

如何使用hibernate lucene搜索具有多对一关系的实体,lucene,hibernate-search,Lucene,Hibernate Search,我正在使用Hibernate lucene进行搜索。现在我想搜索一个具有多对一关系的实体 我有两个类,一个是目录库,另一个是主题,这里的主题有一个多对一的关系(它是单边关系) CatalogeBase.java类: @索引 @JsonAutoDetect @实体 @表(name=“catalotebase”) 公共类CatalogeBase扩展BaseObject实现可序列化{ //一些实体 // ... 私人主体; //setter和get方法 // ... @字段(index=index.Y

我正在使用Hibernate lucene进行搜索。现在我想搜索一个具有多对一关系的实体

我有两个类,一个是
目录库
,另一个是
主题
,这里的主题有一个多对一的关系(它是单边关系)

CatalogeBase.java类:

@索引
@JsonAutoDetect
@实体
@表(name=“catalotebase”)
公共类CatalogeBase扩展BaseObject实现可序列化{
//一些实体
// ...
私人主体;
//setter和get方法
// ...
@字段(index=index.YES,analyze=analyze.YES,store=store.YES)
@许多酮
@NotFound(action=NotFoundAction.IGNORE)
@JoinColumn(name=“subject1”,insertable=true,updateable=true,nullable=true)
@JsonProperty
公共主题getSubject(){
返回主题;
}
公共无效设置主体(主体){
this.subject=主语;
}
}
Subject.java(我想搜索的主题将存储在描述列中):

@索引
@JsonAutoDetect
@实体
@表(name=“subject”)
公共类Subject实现java.io.Serializable{
私有字符串描述;
// ...
@列(name=“subjectname”,null=false,长度=150)
公共字符串getDescription(){
返回此.description;
}
公共void集合描述(字符串描述){
this.description=描述;
}
// ....
}
这是我的刀法:

private List searchTitle(字符串queryString)抛出InterruptedException{
Session=getSession();
FullTextSession FullTextSession=Search.getFullTextSession(会话);
fullTextSession.createIndexer().startAndWait();
org.hibernate.Query fullTextQuery=null;
列表结果列表=null;
试一试{
QueryBuilder QueryBuilder=fullTextSession.getSearchFactory().buildQueryBuilder().forEntity(catalogebase.class).get();
org.apache.lucene.search.Query luceneQuery=queryBuilder.keyword().onFields(“title”、“subject”).matching(queryString).createQuery();
fullTextQuery=fullTextSession.createFullTextQuery(luceneQuery,catalogebase.class);
List contactList=fullTextQuery.List();
结果列表=新的ArrayList();;
用于(目录库目录库:联系人列表){
catalogebase.setNoOfCopiesBooks(getCopydetailsCount(catalogebase.getId());
catalokebase.setIssuedCount(getIssuedCount(catalokebase.getId());
结果列表.add(目录库);
}
}捕获(例外e){
e、 printStackTrace();
}
返回结果列表;
}
但它给出了如下错误:
SearchException:无法在com.easylib.elibrary.model.catalogebase中找到字段主题

我做了类似的事情,但错误是一样的。

我得到了解决方案

我将只是张贴代码

@索引//必须
@JsonAutoDetect
@实体
@表(name=“subject”)
公共类Subject实现java.io.Serializable{
私有字符串描述;
@包含在//必须
@字段(index=index.YES,analyze=analyze.YES,store=store.YES)
@列(name=“subjectname”,null=false,长度=150)
公共字符串getDescription(){
返回此.description;
}
}
目录中:

@ManyToOne
@NotFound(action=NotFoundAction.IGNORE)
@JoinColumn(name=“subject1”,insertable=true,updateable=true,nullable=true)
@JsonProperty
@IndexedEmbedded//必须
公共主题getSubject(){
返回主题;
}
公共无效设置主体(主体){
this.subject=主语;
}
在道中,它必须是:

org.apache.lucene.search.Query luceneQuery=queryBuilder.keyword().onFields(“subject.description”).matching(queryString.createQuery();