Long nous convient, n'y touchons pas.
create permet de créer les tables si elles n'existent pas déjà. L'option
drop and create efface le contenu du schéma systématiquement à chaque lancement. Cette option n'est utilisable qu'en phase de développement et de test, et uniquement si notre modèle ne comporte pas trop d'entités, ni trop de tables. Enfin, l'option
none ne fait rien. On choisit dans cet exemple l'option
drop and create.
Marin.
persistence.xml, rangé dans le répertoire
META-INF du projet.
eclipselink-javax.persistence-2.0.jar et
eclipselink-2.0.2.jar respectivement.
Marin. Examinons le code que NetBeans a généré pour nous.
Exemple 1. Une première classe persistante
@Entity public class Marin implements Serializable { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; public Long getId() { return id; } public void setId(Long id) { this.id = id; } // suivent les méthode toString(), equals() et hashCode() }
@Entity,
@Id et
@GeneratedValue. Ces éléments, qui commencent par le caractère
@ sont des annotations. D'une façon générale, une annotation est une information que l'on donne à la machine Java sur le fonctionnement de l'élément annoté.
Par exemple,
@Entity placé sur un nom de classe indique à la machine Java que cette classe est une classe persistante, et qu'elle doit être associée à une ou plusieurs tables de la base de données.
L'annotation
@Id indique que ce champ est la clé primaire pour la classe
Marin. Comme c'est la base de données qui génère elle-même les valeurs des différentes clés primaires, nous lui indiquons juste une stratégie de génération, par l'annotation supplémentaire
@GeneratedValue(strategy = GenerationType.AUTO).
persistence.xml. C'est dans ce fichier que se trouvent tous les éléments qui permettent de créer les
unités de persistance
, dont nous allons nous servir pour utiliser notre application.
Examinons le contenu de ce fichier.
Exemple 2. Un premier
persistence.xml
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> <persistence-unit name="jpa-test" transaction-type="RESOURCE_LOCAL"> <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> <class>org.paumard.cours.model.Marin</class> <properties> <property name="javax.persistence.jdbc.url" value="jdbc:derby::1527/JPA_Test"/> <property name="javax.persistence.jdbc.password" value="jpa_passwd"/> <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.ClientDriver"/> <property name="javax.persistence.jdbc.user" value="jpa_user"/> <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/> </properties> </persistence-unit> </persistence>
persistence. Cet élément peut comporter autant de sous-éléments
persistence-unit que l'on veut. Cela dit, généralement on n'en trouve qu'une seule.
Chaque élément
persistence-unit définit une unité de persistance. Il doit porter un nom (attribut
name), et un attribut
transaction-type, qui peut prendre deux valeurs :
RESOURCE_LOCAL comme ici, ou
JTA.
Cet élément
persistence-unit doit comporter un unique sous-élément
provider. C'est cet élément qui définit l'implémentation JPA utilisée. Ici, il s'agit d'EclipseLink.
Suit la liste des classes persistantes. Cet élément est en fait facultatif.
Enfin, se trouve une liste de propriétés, qui vont permettre à l'unité de persistance de fonctionner. Les premières propriétés de notre exemple sont standard, et permettent à l'unité de persistance d'ouvrir une connexion JDBC vers la base que nous avons définie. La propriété
eclipselink.ddl-generation est propre à EclipseLink, et définit le comportement lors du lancement de l'application.