Objectifs TP JPA Association et Héritage Author : Cedric Dumoulin Date : 13 nov. 2012 Rev : 14 Oct. 2014 Dans ce TP vous allez faire plusieurs petits exemples afin de vous familiariser avec les associations puis l'héritage dans JPA. Mise en place de l'environnement Assurez-vous que votre environnement vous permet de créer des entity JPA, et de les sauvegarder en base de données. Pour cela, vous devez avoir une implémentation de JPA (ex: EclipseLink), et une base de données (ex: Derby). Le "TP 1 JPA Tutorial " explique comment mettre en place l'environnement. Pour tester votre environnement, vous allez créer un projet avec une classe Todo {summary : String, description : String,...}, et une classe Main qui commence par lister les instances de Todo en base de données, puis crée une nouvelle instance de Todo, et l'ajoute à la base. Exécuter plusieurs fois votre classe main pour vérifier que tous fonctionne correctement. Vous pouvez vous reporter au tutorial de Lars Vogel pour vérifier votre environnement, et voir une solution de cet exercice: http://www.vogella.com/articles/javapersistenceapi/article.html#simple Conseils Vous allez écrire plusieurs petits exemples indépendants. Il y a deux approches possibles : une classe avec sa méthode main() pour chaque exemple, ou une classe avec des tests unitaires pour chaque exemple. Classes avec méthode main() - Pour chaque exemple, vous écrivez une classe avec une méthode main(). Il y a un exemple dans le tutorial de Lars Vogel. Tests Unitaires - Vous écrivez une classe contenant un test unitaire pour chaque exemple. Là aussi, le tutorial de Lars Vogel donne un exemple. Pensez à spécifier 'drop-and-create-table' dans la configuration de votre orm.
Association 1-N Utilisation de collections Vous aller créer une application permettant de créer une entreprise et de lui ajouter des Une entreprise comporte un nom. Un employé comporte un nom, un prénom et son age. Dans cet exemple, vous créez ou retrouvez l'entreprise, puis vous listez ses Ensuite, vous créez un nouvel employé que vous ajoutez à l'entreprise. Testez votre application. Association 1-1 Vous allez ajouter une propriété "adresse : Adresse" à la classe employé. Un employé ne peut avoir qu'une seule adresse. Modifiez votre exemple afin de créer une adresse en même temps que un employé. N'oubliez pas de "vider" votre ancienne BD avant de faire vos tests Testez votre application. Association N-M Un employé participe à plusieurs projets, et un projet à plusieurs participants. Ajoutez la classe Projet à votre application. Modifiez votre exemple afin de tester la nouvelle classe. Videz votre ancienne BD et testez votre application. Association 1-N, classe Equipe Un employé appartient à une et une seule Equipe. Une équipe contient plusieurs Ajoutez la classe Equipe à votre application. Modifiez votre exemple afin de tester la nouvelle classe. Videz votre ancienne BD et testez votre application. Association Bidirectionnelle, méthode de gestion Lorsque l'on affecte une équipe à un employé, il faut aussi affecté l'employé à l'équipe. Modifiez la méthode employé.setequipe(...) afin de gérer automatiquement le positionnement des deux extrémités de l'association: quand on positionne l'équipe dans un employé, l'employé est automatiquement ajouté à l'équipe. N'oubliez pas de vérifier si l'employé appartient déjà à une autre équipe.
Persistance par transitivité La persistance par transitivité consiste a sauvegarder toutes les entités référencés par une entité containeur lorsque cette dernière est sauvegardé. Testez le comportement de JPA: Dans un exemple, créez une Entreprise et plusieurs employés que vous ajoutez à l'entreprise. Ensuite, rendez l'objet Entreprise persistant. Que ce passe t-il? Modifiez votre code afin que les employés soient aussi sauvegardés lorsque vous sauvegardez l'entreprise. Récupération lazy / eager A l'aide d'un des exemples précédents, créez une entreprise avec plusieurs Ensuite, écrivez un code permettant de récupérer l'entreprise, et d'afficher les Testez la récupération en utilisant d'abord le mode LAZY, puis le mode EAGER. Vos classes doivent maintenant correspondre plus ou moins au diagramme suivant: Héritage - Une table par hiérarchie Pour tester la persistance de l'héritage, nous allons reprendre les classes suivantes. Il est conseillé de créer un nouveau projet pour ces exercices.
Créez les classes de la hiérarchie de Joueurs (Player) avec leurs propriétés. Puis, écrivez des exemples, permettant de créer des Footballer, des Cricketer et des Bowler. Dans un autre exemple, commencez par créer différents types de joueurs, puis récupérez et affichez l'ensemble des players de la BD. Ecrivez un autre exemple permettant de récupérer les joueur dont le nom commence par 'r'. Héritage - Une table par classe Modifiez vos exemples précédents afin d'utiliser la stratégie une table par classe. Refaites vos tests. Héritage - Classe mère persistante Dans la hiérarchie de classes suivante, la classe Base sert uniquement d'implémentation commune. Cette classe Base ne doit pas être sauvegardé en BD. Par contre, les données qu'elle contient doivent être sauvegardée avec chacune des classes filles.
Implémentez cette hiérarchie en tenant compte de la contrainte sur la classe Base. Ecrivez un exemple pour créer des entités de type A et B, et pour les relire. Vérifiez qu'aucune table n'est créée pour Base, et que les données author et creationdate sont bien sauvegardées avec les entités de type A ou B.