TRAVAIL A REALISER :
On souhaite développer une hiérarchie de bean entités dont la classe de base Article n’est pas persistante.
La classe de base Article.java n’est pas persistante et n’est donc pas annotée avec @Entity
L’annotation @MappedSuperclass la remplace.
L’annotation @Inheritance(strategy=InheritanceType.JOINED) doit maintenant être ajoutée sur la classe Vin.
Aucune autre annotation n’est nécessaire sur les sous-classes (sauf @Entity)
@Repository public interface ArticleRepository extends JpaRepository<Article, Integer> { }
Le code du Contrôleur est modifié pour tenir compte de la non-persistance de la classe Article :
@RestController @CrossOrigin("*") public class MainController{ @Autowired private ArticleRepository articleRepo; @Autowired private BouteilleRepository bouteilleRepo; @Autowired private VinRepository vinRepo; @Autowired private BarriqueRepository barriqueRepo; @GetMapping("/") @ResponseBody public String home() { init(); StringBuilder sb = new StringBuilder(); sb.append("<h1>Regardez dans votre base de données MySQL <strong>JPA</strong></h1>"); sb.append("<p>Vous devez avoir <strong>4 tables</strong> comme avec l'exemple précédent :</p>"); sb.append("<ul><li><a href='http://localhost:8080/articles'>Liste des <strong>Articles</strong> enregistrés</a></li>"); sb.append("<li><a href='http://localhost:8080/barriques'>Liste des <strong>Barriques</strong> enregistrées</a></li>"); sb.append("<li><a href='http://localhost:8080/bouteilles'>Liste des <strong>Bouteilles</strong> enregistrées</a></li>"); sb.append("<li><a href='http://localhost:8080/vins'>Liste des <strong>Vins</strong> enregistrés</a></li></ul>"); return sb.toString(); } @GetMapping(value = "/articles") public ResponseEntity<?> getAllArticles(){ List<Article> liste = null; try { liste = articleRepo.findAll(); } catch (Exception e) { return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null); } return ResponseEntity.status(HttpStatus.OK).body(liste); } @GetMapping(value = "/barriques") public ResponseEntity<?> getAllBarriques(){ List<Barrique> liste = null; try { liste = barriqueRepo.findAll(); } catch (Exception e) { return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null); } return ResponseEntity.status(HttpStatus.OK).body(liste); } @GetMapping(value = "/bouteilles") public ResponseEntity<?> getAllBouteilles(){ List<Bouteille> liste = null; try { liste = bouteilleRepo.findAll(); } catch (Exception e) { return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null); } return ResponseEntity.status(HttpStatus.OK).body(liste); } @GetMapping(value = "/vins") public ResponseEntity<?> getAllVins(){ List<Vin> liste = null; try { liste = vinRepo.findAll(); } catch (Exception e) { return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null); } return ResponseEntity.status(HttpStatus.OK).body(liste); } /** * Méthode d'initialisation (démo) * On met plutôt un fichier data.sql dans le dossier resources * non utilisée */ private void init() { Article a1=new Article(); a1.setCodeArticle(396238); a1.setDesignation("verre"); a1.setPrix(2.3); a1.setRemise(0); a1.setQuantite(8); Barrique bar1=new Barrique(); bar1.setCodeArticle(629043); bar1.setDesignation("Barrique en chêne"); bar1.setRegion("Bordeaux (Margaux)"); bar1.setCouleur("rouge"); bar1.setPrix(85); bar1.setRemise(0); bar1.setQuantite(8); bar1.setContenance(1000); bar1.setAnnee(2015); Bouteille b1=new Bouteille(); b1.setCodeArticle(765439); b1.setDesignation("Les Hauts du Tertre 1999"); b1.setRegion("Bordeaux (Margaux)"); b1.setCouleur("rouge"); b1.setPrix(11.50); b1.setRemise(0); b1.setQuantite(2); b1.setContenance(75); b1.setAnnee(2019); Bouteille b2=new Bouteille(); b2.setCodeArticle(543289); b2.setDesignation("Château Marquis de Terme 1998"); b2.setRegion("Bordeaux (Margaux)"); b2.setCouleur("rouge"); b2.setPrix(19.00); b2.setRemise(0); b2.setQuantite(3); b2.setContenance(75); b2.setAnnee(2018); Bouteille b3=new Bouteille(); b3.setCodeArticle(278237); b3.setDesignation("Clos du Marquis 1999"); b3.setRegion("Bordeaux (Saint-Julien)"); b3.setCouleur("rouge"); b3.setPrix(22.90); b3.setRemise(0); b3.setQuantite(15); b3.setContenance(75); b3.setAnnee(2000); Bouteille b4=new Bouteille(); b4.setCodeArticle(974534); b4.setDesignation("Clos du Baron 1998"); b4.setRegion("Bordeaux (Saint-Julien)"); b4.setCouleur("blanc"); b4.setPrix(45.20); b4.setRemise(0); b4.setQuantite(54); b4.setContenance(75); b4.setAnnee(2018); Vin v1 = new Vin(); v1.setCodeArticle(666666); v1.setDesignation("Pinard de Simplon"); v1.setRegion("Montreuil"); v1.setCouleur("rosé"); v1.setPrix(3.80); v1.setRemise(0); v1.setQuantite(150); v1.setAnnee(2016); Vin v2 = new Vin(); v2.setCodeArticle(777777); v2.setDesignation("Bière de Simplon"); v2.setRegion("Montreuil à Perpette les oies"); v2.setCouleur("Jaune"); v2.setPrix(8.99); v2.setRemise(0); v2.setQuantite(200); v2.setAnnee(2015); System.out.println("ajout du produit: "+a1); articleRepo.save(a1); System.out.println("ajout du produit: "+bar1); articleRepo.save(bar1); System.out.println("ajout du produit: "+b1); articleRepo.save(b1); System.out.println("ajout du produit: "+b2); articleRepo.save(b2); System.out.println("ajout du produit: "+b3); articleRepo.save(b3); System.out.println("ajout du produit: "+b4); articleRepo.save(b4); System.out.println("ajout du produit: "+v1); articleRepo.save(v1); System.out.println("ajout du produit: "+v2); articleRepo.save(v2); System.out.println("modification du produit "+b3.getDesignation()+ "(10 bouteilles)"); b3.setQuantite(10); articleRepo.save(b3); System.out.println("modification du produit "+b4.getDesignation()+ "(50 bouteilles)"); b4.setQuantite(50); articleRepo.save(b4); System.out.println("suppression de l'article "+b2.getDesignation()); articleRepo.delete(b2); } }
Voici ce que vous devriez trouver comme structure de table Vin dans MySQL :
Structure SQL que vous devez obtenir :
CREATE TABLE IF NOT EXISTS `barrique` ( `codeArticle` int(11) NOT NULL, `contenance` int(11) DEFAULT NULL, PRIMARY KEY (`codeArticle`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `bouteille` ( `codeArticle` int(11) NOT NULL, `contenance` int(11) DEFAULT NULL, PRIMARY KEY (`codeArticle`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `vin` ( `codeArticle` int(11) NOT NULL, `designation` varchar(255) DEFAULT NULL, `prix` double DEFAULT NULL, `quantite` int(11) DEFAULT NULL, `remise` double DEFAULT NULL, `annee` int(11) DEFAULT NULL, `couleur` varchar(255) DEFAULT NULL, `region` varchar(255) DEFAULT NULL, PRIMARY KEY (`codeArticle`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- Contraintes ALTER TABLE `barrique` ADD CONSTRAINT `barrique_ibfk_1` FOREIGN KEY (`codeArticle`) REFERENCES `vin` (`codeArticle`); ALTER TABLE `bouteille` ADD CONSTRAINT `bouteille_ibfk_1` FOREIGN KEY (`codeArticle`) REFERENCES `vin` (`codeArticle`);
Retour vers les autres exercices