target
. Bien penser à remplir le fichier etudiants.txt
. Il est possible d'ajouter dans ce fichier tout commentaire à destination du correcteur.etudiants.txt
si le TP a été réalisé avec PostgreSQL ou bien avec Oracle.L'objectif de ce TP est de mettre en place un mapping Objet/Relationnel via l'API JPA.
Quelques liens:
javax.persistence
On considère le schéma relationnel fourni dans un des fichiers suivants (selon le SGBD choisi): schema PostgreSQL, schema Oracle
Utiliser le script choisi pour créer les tables:
mon_repertoire
par le répertoire où se trouve le fichier ojdbc6.jar
:mvn install:install-file -Dfile=mon_repertoire/ojdbc6.jar -DgroupId=com.oracle -DartifactId=ojdbc -Dversion=6 -Dpackaging=jar -DgeneratePom=true -DcreateChecksum=true
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: bdav-tp-orm-base.zip.
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 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 persistence.
<note tip>Si vous utilisez Oracle, ces deux fichiers sont à modifier en suivant les commentaires qui sont dedans.</note>
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