私の解決策は、永続オブジェクトでインターフェイスをまったく回避することでした。したがって、BaseContract
次のようになりました:
public abstract class BaseContract<T extends Code> {
public abstract T getCode();
}
そしてPersistentContract
具体的なクラスの観点から実装されました:
public class PersistentContract extends BaseContract<CodeImpl> {
}
これは、基本クラスのインターフェースに対するコーディングと、SpringDataの具体的なクラスのニーズを満たすこととの間の適切なバランスをとっているようです。