Vous pouvez combiner les méthodes annotées de plusieurs interfaces en étendant
celles-ci avec une autre interface. Lorsque vous définissez les accès pour une interface
étendue, le plan de travail crée un package DB2 qui
contient les instructions SQL en provenance des interfaces étendues.
Vous devez étendre les interfaces avec le mot clé extends.
Vous devez également ajouter l'annotation @PureQueryInterface à l'interface étendue.
L'interface étendue peut aussi déclarer des méthodes annotées. Dans ce cas, la classe d'implémentation que vous générez pour l'interface étendue contient les définitions des méthodes annotées qui sont déclarées dans les interfaces étendues.
Exemple
Supposez que vous disposez des interfaces suivantes :
public interface SalesTeam {
@Select(sql="SELECT * FROM SALES")
List<SalesBean> getSalesEmployees();
}
public interface MarketingTeam {
@Select(sql="SELECT * FROM MARKETING")
List<MktBean> getMarketingEmployees();
}
Vous voulez définir les accès des instructions SQL de ces interfaces dans
un package DB2 distinct.
Pour ce faire, vous pouvez effectuer les opérations suivantes :
- Créez une interface qui étend SalesTeam et MarketingTeam.
Dans cet exemple, le nom de l'interface est CombinedTeam et l'interface est la suivante :
@PureQueryInterface
public interface CombinedTeam extends SalesTeam, MarketingTeam {
}
- Ajoutez l'annotation @PureQueryInterface à l'interface CombinedTeam.
- Générez l'implémentation pour l'interface CombinedTeam en sauvegardant l'interface. L'implémentation de CombinedTeam contient les méthodes qui sont déclarées dans les interfaces SalesTeam et MarketingTeam.
Ces interfaces ne peuvent pas contenir de méthodes annotées identiques.
Le plan de travail ne génère pas d'implémentations pour les interfaces
SalesTeam et MarketingTeam.
Si les classes d'implémentation de ces interfaces existent dans le projet, le plan de travail ne les supprime pas. Si vous modifiez l'interface SalesTeam ou MarketingTeam, le plan de travail régénère la classe d'implémentation de l'interface
CombinedTeam.
Six scénarios possibles
Ces scénarios illustrent le comportement du plan de travail lorsque vous étendez des interfaces, supprimez des extensions des interfaces ou supprimez des interfaces étendues.
Chaque scénario montre ce qui se passe lorsque la case à cocher Traiter les implémentations générées comme du code utilisateur est sélectionnée et lorsqu'elle ne l'est pas. Par défaut, cette case à cocher est sélectionnée, ce qui signifie que le plan de travail ne supprime jamais les classes d'implémentation.
Vous pouvez accéder à cette case à cocher en cliquant avec le bouton droit de la souris sur votre projet
Java puis en sélectionnant Propriétés.
Dans la fenêtre Propriétés, développez pureQuery et sélectionnez
Propriétés.
Ces scénarios utilisent les interfaces suivantes :
- L'interface A, qui ne déclare pas les méthodes annotées.
- Les interfaces B, Y et Z, qui déclarent les méthodes annotées.
- SCENARIO 1 : Extension des interfaces avec une interface qui ne déclare pas les méthodes annotées
- Procédure
- Créez les interfaces Y et Z. Ces interfaces déclarent les méthodes annotées.
- Créez l'interface A pour que celle-ci étende les interfaces Y et Z.
- Comportement du plan de travail si vous avez spécifié que les classes d'implémentation doivent être conservées
- Le plan de travail conserve les classes d'implémentation des interfaces Y et Z, s'il en existe. Si vous
modifiez l'une de ces interfaces, la classe d'implémentation correspondante est conservée.
- Le plan de travail génère la classe d'implémentation de l'interface A. Cette classe définit les méthodes annotées
qui sont déclarées dans les interfaces Y et Z.
- Comportement du plan de travail si vous n'avez pas spécifié que les classes d'implémentation doivent être conservées
- Le plan de travail supprime les classes d'implémentation des interfaces Y et Z, s'il en existe. Toutes les
modifications apportées à ces classes sont perdues.
- Le plan de travail génère la classe d'implémentation de l'interface A. Cette classe définit les méthodes annotées qui sont déclarées dans les interfaces Y et Z.
- SCENARIO 2 : Extension des interfaces avec une interface qui ne déclare pas les méthodes annotées
- Procédure
- Créez les interfaces Y et Z. Ces interfaces déclarent les méthodes annotées.
- Créez l'interface B pour que celle-ci déclare les méthodes annotées et étende les interfaces Y et Z.
- Comportement du plan de travail si vous avez spécifié que les classes d'implémentation doivent être conservées
- Le plan de travail conserve les classes d'implémentation des interfaces Y et Z, s'il en existe. Toutefois,
si vous modifiez l'une de ces interfaces, la classe d'implémentation correspondante est supprimée.
- Le plan de travail génère les classes d'implémentation de l'interface B. Ces classes définissent les méthodes
annotées qui sont déclarées dans les interfaces B, Y et Z.
- Comportement du plan de travail si vous n'avez pas spécifié que les classes d'implémentation doivent être conservées
- Le plan de travail supprime les classes d'implémentation des interfaces Y et Z, s'il en existe. Toutes les
modifications apportées à ces classes sont perdues.
- Le plan de travail génère la classe d'implémentation de l'interface B. Cette classe définit les méthodes annotées qui sont déclarées dans les interfaces Y et Z.
- SCENARIO 3 : Annulation de l'extension des interfaces à partir d'une interface qui ne déclare pas les méthodes annotées
- Procédure
- Modifiez l'interface A de telle sorte qu'elle n'étende plus les interfaces Y et Z ou qu'elle ne contienne plus l'annotation @PureQueryInterface.
- Comportement du plan de travail si vous avez spécifié que les classes d'implémentation doivent être conservées
- Le plan de travail conserve la classe d'implémentation de l'interface A
- Comportement du plan de travail si vous n'avez pas spécifié que les classes d'implémentation doivent être conservées
- Le plan de travail supprime l'implémentation de l'interface A dans la mesure où l'interface ne déclare aucune méthode annotée. Les modifications apportées à cette classe sont perdues.
Dans les deux cas, si vous voulez que le plan de travail génère les classes
d'implémentation pour les interfaces Y et Z, vous devez effectuer l'une des opérations suivantes :
- Sélectionnez Projet et vérifiez que l'option Générer automatiquement est sélectionnée. Modifiez et sauvegardez les interfaces.
Votre modification peut être minime : il peut s'agir par exemple de l'ajout d'un espace.
- Sélectionnez Projet > Nettoyer pour générer votre projet.
- SCENARIO 4 : Annulation de l'extension des interfaces à partir d'une interface qui ne déclare pas les méthodes annotées
- Procédure
- Modifiez l'interface B de telle sorte qu'elle n'étende plus les interfaces Y et Z ou qu'elle ne contienne plus l'annotation @PureQueryInterface.
- Comportement du plan de travail, que vous ayez spécifié ou non la conservation des classes d'implémentation
- Le plan de travail régénère la classe d'implémentation de l'interface B. Les modifications apportées à la classe d'implémentation sont perdues. Dans les deux cas, si vous voulez que le plan de travail génère les classes
d'implémentation pour les interfaces Y et Z, vous devez effectuer l'une des opérations suivantes :
- Sélectionnez Projet et vérifiez que l'option Générer automatiquement est sélectionnée. Modifiez et sauvegardez les interfaces.
Votre modification peut être minime : il peut s'agir par exemple de l'ajout d'un espace.
- Sélectionnez Projet > Nettoyer pour générer votre projet.
- SCENARIO 5 : Suppression d'une interface qui ne déclare pas les méthodes annotées et étend les interfaces qui les déclarent
- Procédure
- Supprimez l'interface A qui ne déclare pas les méthodes annotées et qui étend les interfaces Y et Z.
- Comportement du plan de travail si vous avez spécifié que les classes d'implémentation doivent être conservées
- Le plan de travail conserve la classe d'implémentation de l'interface A. Toutefois, le projet comporte maintenant une erreur de compilation.
- Comportement du plan de travail si vous n'avez pas spécifié que les classes d'implémentation doivent être conservées
- Le plan de travail supprime la classe d'implémentation de l'interface A.
Dans les deux cas, si vous voulez que le plan de travail génère les classes
d'implémentation pour les interfaces Y et Z, vous devez effectuer l'une des opérations suivantes :
- Sélectionnez Projet et vérifiez que l'option Générer automatiquement est sélectionnée. Modifiez et sauvegardez les interfaces.
Votre modification peut être minime : il peut s'agir par exemple de l'ajout d'un espace.
- Sélectionnez Projet > Nettoyer pour générer votre projet.
- SCENARIO 6 : Suppression d'une classe d'implémentation qui déclare les méthodes annotées et étend les interfaces qui les déclarent
- Procédure
- Supprimez l'interface B qui déclare les méthodes annotées et étend les interfaces Y et Z.
- Comportement du plan de travail si vous avez spécifié que les classes d'implémentation doivent être conservées
- Le plan de travail conserve la classe d'implémentation de l'interface B. Toutefois, le projet comporte maintenant une erreur de compilation.
- Comportement du plan de travail si vous n'avez pas spécifié que les classes d'implémentation doivent être conservées
- Le plan de travail supprime la classe d'implémentation de l'interface B.
Dans les deux cas, si vous voulez que le plan de travail génère les classes
d'implémentation pour les interfaces Y et Z, vous devez effectuer l'une des opérations suivantes :
- Sélectionnez Projet et vérifiez que l'option Générer automatiquement est sélectionnée. Modifiez et sauvegardez les interfaces.
Votre modification peut être minime : il peut s'agir par exemple de l'ajout d'un espace.
- Sélectionnez Projet > Nettoyer pour générer votre projet.