JPA Créer un nouveau projet Java File/new/Java Project Nommez le projet tp-jpa Copiez dans le projet le répertoire lib (contient les bibliothèques hibernate) http://fichiers.partage.free.fr/files/jpa-lib.zip et le répertoire db (contient la bibliothèque hsqldb) http://fichiers.partage.free.fr/files/jpa-db.zip Ajoutez tous les jars dans le classpath du projet. placer dans le répertoire src un fichier log4j.properties contenant les paramètres suivants: log4j.debug=false log4j.rootLogger=INFO, A1 log4j.appender.A1=org.apache.log4j.ConsoleAppender log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n log4j.logger.org.hibernate=DEBUG Préparer la base de données Modifiez le fichier db\runserver.bat contenant les commandes suivantes: set projectroot=[votre workspace]\tp-jpa java -cp %projectroot%\db\hsqldb.jar org.hsqldb.Server -database.0 file:%projectroot%\dbfiles\jpatestDB -dbname.0 jpatest Modifiez le fichier runmanager.bat contenant la commande suivante: java -cp [votre workspace]\tp-jpa\db\hsqldb.jar org.hsqldb.util.DatabaseManager -driver org.hsqldb.jdbcDriver -url jdbc:hsqldb:hsql://localhost/jpatest -user sa Pour modifier: Open with text editor. Pour exécuter: Open with system editor. Exécutez runserver.bat et runmanager.bat Créez un fichier META-INF\persistence.xml: <?xml version="1.0" encoding="UTF-8"?> <persistence version="1.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_1_0.xsd"> <persistence-unit name="tpjpa-pu" transaction-type="RESOURCE_LOCAL"> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect" /> <property name="hibernate.hbm2ddl.auto" value="create" /> <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver" /> <property name="hibernate.connection.username" value="sa" /> <property name="hibernate.connection.password" value="" /> <property name="hibernate.connection.url" value="jdbc:hsqldb:hsql://localhost/tpjpa"/> <property name="hibernate.show_sql" value="true" /> </properties> </persistence-unit> </persistence> Créer le modèle Dans le répertoire src, créez un package nommé entity. Créez le modèle du domaine: des classes annotées. Créez une classe Bank et une classe Customer en recyclant le code du TP précédent. Les attributs doivent être privés, les classes doivent être sérializable et posséder des getters et setters pour les attributs ainsi qu'un constructeur par défaut. Les classes doivent être annotées @Entity (importer javax.persistence.Entity) Les identifiants sont annotés @Id @GeneratedValue Ces classes étant utilisées dans des Collections, générez les méthodes equals et hashCode afin que les tris puissent être effectués. Se limiter à l'attribut id pour la génération de ces méthodes. Remplacez les attributs List représentant des associations 1-N par des collections gérées par l'API JPA: private List<Customer> customers = new ArrayList<Customer>(); devient @OneToMany(cascade=CascadeType.ALL, mappedBy = "bank") private Set<Customer> customers = new HashSet<Customer>(); L'opposé du lien 1-N est codé ainsi: @ManyToOne private Bank bank; Implémentez une classe de test: public class EntityManagerTest { EntityManagerFactory emf; public void test() { emf = Persistence.createEntityManagerFactory("tpjpa-pu"); if (emf == null) throw new RuntimeException("EntityManagerFactory is null"); emf.close(); } public static void main(String[] args) { new EntityManagerTest().test(); } } Lancez le serveur de base de données avec la commande runserver.bat. Exécutez cette classe. Lancer l'administrateur de la base de données avec la commande runmanager.bat. Examinez le résultat produit, commentez. Insérez le code suivant, exécutez, commentez. Customer cust= new Customer("Jean Dupognon"); Customer cust2= new Customer("Paul Duflouze"); Customer cust3= new Customer("Pierre Palnord"); Bank bank = new Bank("Internet Bank"); Bank bank2 = new Bank("Credit Arboricole"); bank.addCustomer(cust); bank.addCustomer(cust2); bank2.addCustomer(cust3); EntityManager em = emf.createEntityManager(); em.getTransaction().begin(); em.persist(bank); em.persist(bank2); em.getTransaction().commit(); em.close(); [email protected] JEE 2007-2008