我越來越沒有地方嘗試這個東西。我的要求,搜索是由他們的名字來搜索記錄如何在相關實體(休眠搜索)
以下是我的相關類:
RecordFolderAnalysis.java
@Indexed
public class RecordFolderAnalysis extends AuditableEntity implements Serializable {
@ManyToOne
@JoinColumn(name = "arrivalId", nullable = false)
@ContainedIn
private RecordFolderArrival recordFolderArrival;
}
RecordFolderArrival.java
@Indexed
public class RecordFolderArrival extends BaseEntity implements Serializable
{
@Column(name="recordName", unique = true, nullable = false)
@Field(index = Index.UN_TOKENIZED)
private String recordName;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "recordFolderArrival", fetch = FetchType.LAZY, targetEntity = RecordFolderAnalysis.class)
@IndexedEmbedded
private List<RecordFolderAnalysis> recordFolderAnalysis=new ArrayList<>();
}
Follwing是我的DAO類方法:
@Override
public List<T> search(final String queryString, final String... fields) {
List searchResult = hibernateTemplate.executeFind(new HibernateCallback<Object>() {
org.hibernate.Query fullTextQuery1 = null;
@Override
public Object doInHibernate(Session session) throws HibernateException, SQLException {
try {
System.out.println("in do in hibernate");
FullTextSession fullTextSession = Search.getFullTextSession(session);
Transaction tx = fullTextSession.beginTransaction();
QueryBuilder builder=fullTextSession.getSearchFactory().buildQueryBuilder().forEntity(persistentClass).get();
Query luceneQuery=builder.keyword().onField("recordFolderArrival.recordName").matching(queryString).createQuery();
fullTextQuery1 = fullTextSession.createFullTextQuery(luceneQuery);
for (Object o : fullTextQuery1.list()) {
System.out.println("Values" + o);
}
} catch (Exception e) {
e.printStackTrace();
}
return fullTextQuery1.list();
}
});
return searchResult;
}
所以我在尋找的記錄,名稱設置字段名稱爲recordFolderArrival.recordName。 但它拋出一個異常,說
recordFolderArrival.recordName領域一點兒也不在 RecordFolderAnalysis存在。
我對Hibernate Search非常新,所以如果任何人都可以幫我解決這個問題。 感謝和不要擔心@Entity和其他註釋,他們被放置在他們必須是它的只是我沒有把它們包含在片段中。
我知道我可以通過簡單的NamedQuery做到這一點,但我想通過全文搜索(Hibernate Search)進行搜索。 –
好的,對不起,我錯過了那一點。 –