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.