bytes.cat

La wiki d'FP d'informàtica

Eines de l'usuari

Eines del lloc


hibernate

Diferències

Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.

Enllaç a la visualització de la comparació

Ambdós costats versió prèvia Revisió prèvia
Següent revisió
Revisió prèvia
hibernate [2022/11/24 07:10]
albert_palacios_jimenez
hibernate [2022/11/24 08:24] (actual)
albert_palacios_jimenez [Configuració de Hibernate, arxiu "hibernate.properties"]
Línia 1: Línia 1:
-====== SQLite a Java ======+====== Hibernate ======
  
 {{tag> #FpInfor #Dam #DamMp06 #DamMp06Uf2 #DamMp06Uf02}} {{tag> #FpInfor #Dam #DamMp06 #DamMp06Uf2 #DamMp06Uf02}}
Línia 30: Línia 30:
 - URI de la base de dades - URI de la base de dades
  
-La configuració de "hibernate.properties" per MySQL:+== La configuració de "hibernate.properties" per MySQL: ==
  
 (Cal canviar DB_USER i DB_PASSWORD pels valors corresponents a la connexió ...) (Cal canviar DB_USER i DB_PASSWORD pels valors corresponents a la connexió ...)
Línia 44: Línia 44:
 </code> </code>
  
-La configuració de "hibernate.properties" per SQLite:+== La configuració de "hibernate.properties" per SQLite: ==
  
 (Amb SQLite s’especifica l’arxiu a utilitzar, en aquest cas "database.db") (Amb SQLite s’especifica l’arxiu a utilitzar, en aquest cas "database.db")
Línia 69: Línia 69:
 <hibernate-configuration> <hibernate-configuration>
   <session-factory>   <session-factory>
-     <!-- List of XML mapping files --> 
      <mapping resource="Employee.hbm.xml"/>      <mapping resource="Employee.hbm.xml"/>
      <mapping class="Contact"/>      <mapping class="Contact"/>
Línia 147: Línia 146:
 - Delete - Delete
  
 +Exemple d'arxiu Manajer.java
 +
 +<code java>
 +import java.io.Serializable;
 +import java.util.Collection;
 +import java.util.List;
 +import java.util.Set;
 +
 +import org.hibernate.HibernateException;
 +import org.hibernate.SQLQuery;
 +import org.hibernate.Session; 
 +import org.hibernate.Transaction;
 +import org.hibernate.boot.registry.StandardServiceRegistry;
 +import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
 +import org.hibernate.SessionFactory;
 +import org.hibernate.cfg.Configuration;
 +
 +public class Manager {
 +
 +    private static SessionFactory factory; 
 +    
 +    public static void createSessionFactory() {
 +
 +        try {
 +            Configuration configuration = new Configuration();
 +            configuration.configure();
 +            StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(
 +            configuration.getProperties()).build();
 +            factory = configuration.buildSessionFactory(serviceRegistry);
 +        } catch (Throwable ex) { 
 +            System.err.println("Failed to create sessionFactory object." + ex);
 +            throw new ExceptionInInitializerError(ex); 
 +        }
 +    }
 +
 +    public static void close () {
 +        factory.close();
 +    }
 +  
 +    public static Employee addEmployee(String firstName, String lastName, int salary){
 +        Session session = factory.openSession();
 +        Transaction tx = null;
 +        Employee result = null;
 +        try {
 +            tx = session.beginTransaction();
 +            result = new Employee(firstName, lastName, salary);
 +            session.save(result); 
 +            tx.commit();
 +        } catch (HibernateException e) {
 +            if (tx!=null) tx.rollback();
 +            e.printStackTrace(); 
 +            result = null;
 +        } finally {
 +            session.close(); 
 +        }
 +        return result;
 +    }
 +
 +    public static Contact addContact(String lname, String lmail){
 +        Session session = factory.openSession();
 +        Transaction tx = null;
 +        Contact result = null;
 +        try {
 +            tx = session.beginTransaction();
 +            result = new Contact(lname, lmail);
 +            session.save(result); 
 +            tx.commit();
 +        } catch (HibernateException e) {
 +            if (tx!=null) tx.rollback();
 +            e.printStackTrace(); 
 +            result = null;
 +        } finally {
 +            session.close(); 
 +        }
 +        return result;
 +    }
 +
 +    public static <T> T getById(Class<? extends T> clazz, long id){
 +        Session session = factory.openSession();
 +        Transaction tx = null;
 +        T obj = null;
 +        try {
 +            tx = session.beginTransaction();
 +            obj = clazz.cast(session.get(clazz, id)); 
 +            tx.commit();
 +        } catch (HibernateException e) {
 +            if (tx!=null) tx.rollback();
 +            e.printStackTrace(); 
 +        } finally {
 +            session.close(); 
 +        }
 +        return obj;
 +    }
 +    
 +    public static void updateContact(long contactId, String name, String email, Set<Employee> employees){
 +        Session session = factory.openSession();
 +        Transaction tx = null;
 +        try {
 +            tx = session.beginTransaction();
 +            Contact obj = (Contact) session.get(Contact.class, contactId); 
 +            obj.setName(name);
 +            obj.setEmail(email);
 +            obj.setEmployees(employees);
 +            session.update(obj); 
 +            tx.commit();
 +        } catch (HibernateException e) {
 +            if (tx!=null) tx.rollback();
 +            e.printStackTrace(); 
 +        } finally {
 +            session.close(); 
 +        }
 +    }
 +
 +    public static void updateEmployee(long employeeId, String firstName, String lastName, int salary){
 +        Session session = factory.openSession();
 +        Transaction tx = null;
 +        try {
 +            tx = session.beginTransaction();
 +            Employee obj = (Employee) session.get(Employee.class, employeeId); 
 +            obj.setFirstName(firstName);
 +            obj.setLastName(lastName);
 +            obj.setSalary(salary);
 +            session.update(obj); 
 +            tx.commit();
 +        } catch (HibernateException e) {
 +            if (tx!=null) tx.rollback();
 +            e.printStackTrace(); 
 +        } finally {
 +            session.close(); 
 +        }
 +    }
 +  
 +    public static <T> void delete(Class<? extends T> clazz, Serializable id){
 +        Session session = factory.openSession();
 +        Transaction tx = null;
 +        try {
 +            tx = session.beginTransaction();
 +            T obj = clazz.cast(session.get(clazz, id)); 
 +            session.delete(obj); 
 +            tx.commit();
 +        } catch (HibernateException e) {
 +            if (tx!=null) tx.rollback();
 +            e.printStackTrace(); 
 +        } finally {
 +            session.close(); 
 +        }
 +    }
 +
 +    public static <T> Collection<?> listCollection(Class<? extends T> clazz) {
 +        return listCollection(clazz, "");
 +    }
 +
 +    public static <T> Collection<?> listCollection(Class<? extends T> clazz, String where){
 +        Session session = factory.openSession();
 +        Transaction tx = null;
 +        Collection<?> result = null;
 +        try {
 +            tx = session.beginTransaction();
 +            if (where.length() == 0) {
 +                result = session.createQuery("FROM " + clazz.getName()).list(); 
 +            } else {
 +                result = session.createQuery("FROM " + clazz.getName() + " WHERE " + where).list();
 +            }
 +            tx.commit();
 +        } catch (HibernateException e) {
 +            if (tx!=null) tx.rollback();
 +            e.printStackTrace(); 
 +        } finally {
 +            session.close(); 
 +        }
 +        return result;
 +    }
 +
 +    public static <T> String collectionToString(Class<? extends T> clazz, Collection<?> collection){
 +        String txt = "";
 +        for(Object obj: collection) {
 +            T cObj = clazz.cast(obj);
 +            txt += "\n" + cObj.toString();
 +        }
 +        if (txt.substring(0, 1).compareTo("\n") == 0) {
 +            txt = txt.substring(1);
 +        }
 +        return txt;
 +    }
 +
 +    public static void queryUpdate (String queryString) {
 +        Session session = factory.openSession();
 +        Transaction tx = null;
 +        try {
 +            tx = session.beginTransaction();
 +            SQLQuery query = session.createSQLQuery(queryString);
 +            query.executeUpdate();
 +            tx.commit();
 +        } catch (HibernateException e) {
 +            if (tx!=null) tx.rollback();
 +            e.printStackTrace(); 
 +        } finally {
 +            session.close(); 
 +        }
 +    }
 +
 +    public static List<Object[]> queryTable (String queryString) {
 +        Session session = factory.openSession();
 +        Transaction tx = null;
 +        List<Object[]> result = null;
 +        try {
 +            tx = session.beginTransaction();
 +            SQLQuery query = session.createSQLQuery(queryString);
 +            @SuppressWarnings("unchecked")
 +            List<Object[]> rows = query.list();
 +            result = rows;
 +            tx.commit();
 +        } catch (HibernateException e) {
 +            if (tx!=null) tx.rollback();
 +            e.printStackTrace(); 
 +        } finally {
 +            session.close(); 
 +        }
 +        return result;
 +    }
 +
 +    public static String tableToString (List<Object[]> rows) {
 +        String txt = "";
 +        for (Object[] row : rows) {
 +            for (Object cell : row) {
 +                txt += cell.toString() + ", ";
 +            }
 +            if (txt.length() >= 2 && txt.substring(txt.length() - 2).compareTo(", ") == 0) {
 +                txt = txt.substring(0, txt.length() - 2);
 +            }
 +            txt += "\n";
 +        }
 +        if (txt.length() >= 2) {
 +            txt =  txt.substring(0, txt.length() - 2);
 +        }
 +        return txt;
 +    }
 +}
 +</code>
 ==== Hibernate, transactions ==== ==== Hibernate, transactions ====
  
Línia 421: Línia 659:
 } }
 </code> </code>
 +
 +==== Tipus de relacions N:N ManyToMany ====
 +
 +Són aquelles que creen una relació entre múltiples elements de múltiples d’altres taules. Necessiten una taula extra per mantenir la relació. Per exemple:
 +
 +- Una supermercat té N treballadors i alguns d'aquests són N clients
 +
 +- Múltiples comandes es relacionen amb múltiples clients
  
 ==== Exemple N:N ManyToMany amb ".hbm.xml" ==== ==== Exemple N:N ManyToMany amb ".hbm.xml" ====
Línia 556: Línia 802:
 Als exemples, cada vegada s'esborra i crea la base de dades com a nova Als exemples, cada vegada s'esborra i crea la base de dades com a nova
  
-Fa servir “@hibernate.argfile” per configurar els paràmetres de .java que permeten compilar i fer anar Hibernate+Fan servir “@hibernate.argfile” per configurar els paràmetres de .java que permeten compilar i fer anar Hibernate
  
 {{ :hibernate-exempleintroduccio.zip |}} {{ :hibernate-exempleintroduccio.zip |}}
hibernate.1669273855.txt.gz · Darrera modificació: 2022/11/24 07:10 per albert_palacios_jimenez