JPA Overview della tecnologia
Java Persistence Architecture Definita nella JSR-220 EJB 3.0 ( Tentativo di unificare EJB2.1 con JDO (Java Data Object). Java Persistence API (JPA) permette di mappare POJO in dati relazionale. API standard per: – il salvataggio dei dati – la loro consultazione – Cambiamento cancellazione.
JPA I dati persistenti vengono chiamti Entity. Per esempio User puo essere una entity. I dati dellutente sono dati permanenti: – Name – Surname –
Entity public class private int id; private String name; private String surname; private String ; public User(String name, String surname, String ) { super(); this.name = name; this.surname = surname; this. = ; }
ORM TabellaClasse Colonna della TabellaCampo della Class Riga della TabellaIstanza della classe
JPA Si basa sul concetto di Cache. Flush dei dati della Cache nel database per modificare e inserire i dati nel database. In JPA il PersistenceContext e una Cache. Un EntityManager gestisce un PersistenceContext (e quindi una cache). Un EntityManagerFactory ci permette di creare una cache.
Come ottenere un EntityManager public class EMF { private static final EntityManagerFactory emfInstance = Persistence.createEntityManagerFactory("tutorial"); private EMF() {} public static EntityManagerFactory get() { return emfInstance; } Nella Servlet: EMF.get().createEntityManager()
Aggiungere un Utente if (action.compareToIgnoreCase("addUser") == 0) { // Performs some checks could be done by javascript String name = req.getParameter("name"); String surname = req.getParameter("surname"); String = req.getParameter(" "); if (name != null && surname != null && != null) { User user = new User(name, surname, ); try { em.getTransaction().begin(); em.persist(user); em.getTransaction().commit(); out.println("SAVED USER: name=" + name + " surname=" + " =" + ); } finally { em.close(); }
Visualizzare tutti gli utenti if (action == null) { Query query = em.createQuery("SELECT u FROM it.unige.dist.appengine.entity.User u"); List users = query.getResultList(); for (User user : users) { out.println("USER: name=" + user.getName() + surname= + user.getSurname() + " =" + user.get ()); }
Ricerca sugli utenti if (action.compareTo("searchBy ")==0) { String = req.getParameter(" "); if ( != null) { Query query = em.createQuery("SELECT u FROM it.unige.dist.appengine.entity.User u WHERE u. =: "); query.setParameter(" ", ); List users = query.getResultList(); for (User user : users) { out.println("USER: name=" + user.getName() + " surname=" + user.getSurname() + " =" + user.get ()); }
Rimuovere Utenti em.getTransaction().begin(); User e = em.find(User.class, Long.valueOf(id)); em.remove(e); em.getTransaction().commit();
Esempio di persistence.xml per Jboss e MySQL. <persistence xmlns=" xmlns:xsi=" xsi:schemaLocation=" version="1.0">
Entity public class private int nullable=false, length=70)) private String nullable=false, length=70)) private String nullable=false, length=70)) private String ; public User(String name, String surname, String ) { super(); this.name = name; this.surname = surname; this. = ; } … // setters & getters … }
Riferimenti Introduction to Java Persistence API(JPA): The Java EE 5 Tutorial: