Tagbangers Blog

Hibernate Search: Unable to find field <field> in <object>

Hibernate Search を 5.0 にアップデートしたら。。。

org.hibernate.search.exception.SearchException: Unable to find field post.id in org.wallride.core.domain.Comment

org.hibernate.search.exception.SearchException: Unable to find field post.id in org.wallride.core.domain.Comment
    at org.hibernate.search.engine.spi.DocumentBuilderIndexedEntity.objectToString(DocumentBuilderIndexedEntity.java:674)
    at org.hibernate.search.query.dsl.impl.FieldContext.objectToString(FieldContext.java:69)
    at org.hibernate.search.query.dsl.impl.ConnectedMultiFieldsTermQueryBuilder.buildSearchTerm(ConnectedMultiFieldsTermQueryBuilder.java:129)
    at org.hibernate.search.query.dsl.impl.ConnectedMultiFieldsTermQueryBuilder.createQuery(ConnectedMultiFieldsTermQueryBuilder.java:83)
    at org.hibernate.search.query.dsl.impl.ConnectedMultiFieldsTermQueryBuilder.createQuery(ConnectedMultiFieldsTermQueryBuilder.java:64)

なにやら、 @IndexedEmbedded でマークしている関連エンティティの ID が Lucene にインデックスされていないようなメッセージ。

どうやら、 Hibernate 5.0 から @IndexedEmbedded に includeEmbeddedObjectId という属性が追加されたみたい。
デフォルトが false なので、 true を指定してやらないと、@IndexedEmbedded でマークした対象エンティティの ID をインデックスされない。

ということで、下記で解決。

@ManyToOne(fetch = FetchType.LAZY, optional = false)
@IndexedEmbedded(includeEmbeddedObjectId = true)
private Post post;