Hibernate 検索で埋め込みテキスト エンティティのインデックス作成に問題があります。エンティティは変更できない他のエンティティを拡張するため、注釈を使用することはできません。
したがって、プログラム API を使用してマッピングを行います。ただし、Hibernate 検索は埋め込みテキスト エンティティのインデックスを作成しません。
エンティティ モデルがどのように見えるかの短い例を次に示します (簡単にするために省略しています)。
@Entity
class Article {
@Id
private long uid;
private String articleNumber;
@OneToMany ( mappedBy = "article" )
@MapKey( name = "languageCode" )
private Map<String, ArticleText> texts;
...
}
@Entity
class ArticleText {
@ManyToOne
private ArticleEntity article;
private String languageCode;
private String someText;
...
}
@Entity
class SpecialArticle extends Article {
private String someSpecialAttribute;
}
そして、ここにマッピングの抜粋があります:
SearchMapping mapping = ...;
mapping.entity( SpecialArticle.class )
.indexed()
.property( "uid", ElementType.FIELD ).documentId()
.property( "articleNumber", ElementType.FIELD ).field()
.property( "someSpecialAttribute", ElementType.FIELD ).field()
.property( "texts", ElementType.FIELD )
.indexEmbedded().targetElement( ArticleText.class ).entity( ArticleText.class )
.property( "article", ElementType.FIELD ).containedIn()
.property( "someText", ElementType.FIELD ).field();
ドキュメントは の使用について明確ではありませんが.indexEmbedded().entity(...)
、同様のマッピングを使用してのみインデックス付けされる別の埋め込みエンティティ (多対 1 の関連付け) があります。
マップが使用されており、Hibernate Search がプロパティをマップとして識別できないため、テキストがマップされていないと思われます。a と a がありますがMapBrigde
、BuildInMapBridge
マッピングの構築時には使用されないようです。
何が欠けているのか、どこにエラーがあるのでしょうか?
ところで、これは Hibernate Search 4.0.1 および Hibernate 4.0.1 環境で行います。