Ma solution était d'éviter du tout les interfaces dans l'objet persistant. Donc BaseContract
est devenu le suivant :
public abstract class BaseContract<T extends Code> {
public abstract T getCode();
}
Et PersistentContract
a été implémenté en termes de classes concrètes :
public class PersistentContract extends BaseContract<CodeImpl> {
}
Cela semble trouver le bon équilibre entre le codage par rapport aux interfaces de la classe de base et la satisfaction du besoin de Spring Data en classes concrètes.