Ceci est une ancienne révision du document !
Sujet en cours d'élaboration
L'objectif de ce TP est de mettre en place un mapping Objet/Relationnel via l'API JPA.
Quelques liens:
javax.persistence
Le fichier orm-2013/initialisation-pg.sql
du projet embryonnaire permet de mettre en place le schéma relationnel avec quelques données.
Maven est un utilitaire de compilation/exécution/test de projet Java qui sera utilisé dans le cadre des TP de l'UE. Configurer Maven comme indiqué dans l'aide.
Télécharger et décompresser le projet de base: mif18-2013-base.zip, ou mieux le cloner depuis la forge:
hg clone https://forge.univ-lyon1.fr/hg/inf1008m-2013-base mif18-2013-base
Un projet Maven possède deux répertoires de sources: src/main et src/test. Le premier contient les classes “métier” alors que le second ne contient que le code de test.
Dans Eclipse, il faut importer le projet en utilisant Import existing maven project
. Le projet peut être directement ou vert dans Netbeans.
Le fichier pom.xml
contient les dépendances sur les bibliothèques nécessaires au TP.
Le fichier src/main/resources/META-INF/persistence.xml
contient les informations pour mettre en place le cadre de persistance.
javax.persistence
, afin d'établir les liens entre le modèle relationnel et votre modèle objet.
Le mapping relationnel objet peut être tester à travers le TestCase JUnit placé dans src/test/java/bdav/orm/MappingTest.java
.
Cette classe est exécutable directement comme test JUnit dans Eclipse ou Netbeans.
@EmbeddedId
, @Embbedable
.hibernate.hbm2ddl.auto
de validate
à update
permet au framework de modifier le schéma relationnel. Cela peut être utile pour comprendre à quoi correspond le mapping en cours de développement, mais cela écrase le schéma de l'énoncé. A la fin du TP, le mapping doit fonctionner avec le schéma de fourni plus haut. En cas d'impossibilité, justifier les différences dans des commentaires appropriés dans les classes Java.@Entity(name = "film") public class Film implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(generator = "film_gen", strategy = GenerationType.SEQUENCE) @SequenceGenerator(sequenceName = "film_seq", name = "film_gen") private int id; private String titre; private int annee; public String getTitre() { return titre; } public void setTitre(String titre) { this.titre = titre; } public int getAnnee() { return annee; } public void setAnnee(int annee) { this.annee = annee; } public int getId() { return id; } // Généré dans Eclipse via "Source" -> "Generate hashCode and equals ..." @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + annee; result = prime * result + id; result = prime * result + ((titre == null) ? 0 : titre.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Film other = (Film) obj; if (annee != other.annee) return false; if (id != other.id) return false; if (titre == null) { if (other.titre != null) return false; } else if (!titre.equals(other.titre)) return false; return true; } }
joue_dans
) sans association