当我尝试在项目中使用StringBridge时,我发现objectToString(Object obj)方法至少被调用了两次。一次使用Object将映射到String,第二次使用生成的String,这会导致ClassCastException。
public class SchluessellisteBridge implements StringBridge {
@Override
public String objectToString(Object obj) {
if (obj == null) {
return "";
}
Schluesselliste schluesselliste = (Schluesselliste) obj;
return schluesselliste.getLangname();
}
}
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "rv_entscheidungArt_id")
@Field
@FieldBridge(impl = SchluessellisteBridge.class)
protected Rechtsvorgang entscheidungArt;
即使我使用@DateBridge,我也会遇到这种行为
@Field(analyze = Analyze.NO)
@DateBridge(resolution = Resolution.DAY)
@Temporal(TemporalType.DATE)
我是否误解了StringBridge的目的????
我正在使用Hibernate Search 5.3和Hibernate 4.3
<property name="hibernate.search.default.directory_provider"
value="filesystem" />
<property name="hibernate.search.default.indexBase" value="/var/lucene/indexes" />
我的实体是JPA实体。为了搜索,我使用Hibernate API,如
List<Gesamtentscheidung> gesamtentscheidungen = null;
EntityManager em = PersistenceService.getInstance().getEntityManagerFactory().createEntityManager();
Session session = em.unwrap(Session.class);
FullTextSession fullTextSession = Search.getFullTextSession(session);
fullTextSession.beginTransaction();
QueryBuilder queryBuilder = fullTextSession.getSearchFactory().buildQueryBuilder().forEntity(Gesamtentscheidung.class).get();
org.apache.lucene.search.Query luceneQuery = queryBuilder
.keyword()
.onFields("betreff", "tatbestaende.aktenzeichen", "entscheidungArt")
.matching(searchString)
.createQuery();
org.hibernate.Query hibernateQuery = fullTextSession.createFullTextQuery(luceneQuery, Gesamtentscheidung.class);
gesamtentscheidungen = hibernateQuery.list();
fullTextSession.getTransaction().commit();
em.close();
return gesamtentscheidungen;
答案 0 :(得分:0)
Schluesselliste schluesselliste = (Schluesselliste) obj;
在上面的行中存在问题,因为将为ObjectToString和StringToObject调用此方法,因此最好在转换之前通过instanceof
处理对象。或者你可以探索twowayfieldbridge