3

一部が抽象クラスで構成されるモデルの lucene インデックスを作成しようとしています。クラス B 要素のリストを返すメソッドを持つクラス A にインデックスを付けたいとしましょう。このクラスにはすべて、クラス D 要素のリストを返す抽象メソッド getD() を持つ抽象クラス C のオブジェクトがあります。クラス E と F はクラス C を拡張し、両方ともメソッド getD() を実装します。このために、FieldBridge 実装 (StringBridge を実装) を作成して、結果をテキスト出力に変換し、インデックスに使用します。

Hibernate の検索ドキュメントは、継承の処理方法と @IndexedEmbedded アノテーションとの併用方法についてあまり詳しくありません。c のサブクラスの getD 実装が自動的に使用されることを期待して、c.getD を includePath として提供するという素朴なアプローチを試みました。これにより、サーバーの実行時に次の SearchException が発生します。

org.hibernate.search.SearchException: Found invalid @IndexedEmbedded->paths configured on class A, member vragen: b.c.getD

クラスAのインデックスでFieldBridge実装によって作成された文字列を取得するために、検索パスを設定する方法またはコードを他の方法で変更する方法を知っている人はいますか? 以下にコードを示します。

@Indexed
public class A {
    @IndexedEmbedded(includePaths = { "c.getD" })
    public List<B> getB() {
        // Method implementation returning a list of B
    }
}

public class B{
    private C c;
}

public abstract class C{
    public abstract List<D> getD();
}

public class E extends C{
    @Field
    @FieldBridge(impl = DListFieldBridge.class)
    public List<D> getD() {
        // Method implementation returning a list of D
    }
}

public class F extends C{
    @Field
    @FieldBridge(impl = DListFieldBridge.class)
    public List<D> getD() {
        // Method implementation returning a list of D
    }
}
4

1 に答える 1