La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Softlogia S.R.L. Formación de Recursos Humanos Hibernate Core Instructor: Martin R. Baspineiro.

Presentaciones similares


Presentación del tema: "Softlogia S.R.L. Formación de Recursos Humanos Hibernate Core Instructor: Martin R. Baspineiro."— Transcripción de la presentación:

1 Softlogia S.R.L. Formación de Recursos Humanos Hibernate Core Instructor: Martin R. Baspineiro

2 Hibernate Core – Clase 2 Temario  Conceptos  Mapeo de Relaciones Asociación unidireccional Trabajando con la asociación unidireccional Colección de valores Asociación bidireccional Trabajando con la asociación bidireccional  Configuración  Criteria Query Concepto Filtrando una tabla Asociaciones Ordenación Projections  Practica

3 Hibernate Core – Clase 2 Conceptos  Flushing: es el proceso de sincronización del estado de un objeto persistente en memoria con la base de datos. Usualmente ocurre al final de una transacción.  Eager Fetch: carga ansiosa.  Lazy Fetch: carga perezosa.

4 Hibernate Core – Clase 2 Mapeo de Relaciones  Agregando una Colección de objetos de una clase de dominio a nuestra clase de dominio basada en una relación de la base de datos es posible navegar fácilmente a través de la asociación.  Hibernate representa las asociaciones multivaluadas por medio de una Collection del jdk.

5 Hibernate Core – Clase 2 Mapeo de Relaciones  Asociación unidireccional Es una asociación establecida únicamente desde un extremo de la asociación. Ejemplo, modelo de datos: _____________ __________________ | | | | _____________ | EVENTS | | PERSON_EVENT | | | |_____________| |__________________| | PERSON | | | | | |_____________| | *EVENT_ID | | *EVENT_ID | | | | EVENT_DATE | | *PERSON_ID | | *PERSON_ID | | TITLE | |__________________| | AGE | |_____________| | FIRSTNAME | | LASTNAME | |_____________| <----------------------------- Asociación unidireccional

6 Hibernate Core – Clase 2 Mapeo de Relaciones  Asociación unidireccional Ejemplo, clase de dominio: Agregando una collection de Eventos a la clase Person, podemos navegar a través de los eventos de una persona particular sin necesidad de realizar una query. public class Person { private Set events = new HashSet(); public Set getEvents() { return events; } public void setEvents(Set events) { this.events = events; }

7 Hibernate Core – Clase 2 Mapeo de Relaciones  Asociación unidireccional Ejemplo, archivo de mapeo: Se requiere la tabla relacionada many-to-many marca la multiplicidad.

8 Hibernate Core – Clase 2 Mapeo de relaciones  Asociación unidireccional Ejemplo, trabajando con la asociación bidireccional: Automatic dirty checking, Hibernate automáticamente detecta si hubo un cambio y lo persiste, sin necesidad de un update o save, mientras que su estado sea persistente. private void addPersonToEvent(Long personId, Long eventId) { Session session = HibernateUtil.getSessionFactory().getCurrentSession(); session.beginTransaction(); Person aPerson = (Person) session.load(Person.class, personId); Event anEvent = (Event) session.load(Event.class, eventId); aPerson.getEvents().add(anEvent); session.getTransaction().commit(); }

9 Hibernate Core – Clase 2 Mapeo de Relaciones  Asociación unilateral Ejemplo, trabajando con una asociación bidireccional: private void addPersonToEvent(Long personId, Long eventId) { Session session = HibernateUtil.getSessionFactory().getCurrentSession(); session.beginTransaction(); Person aPerson = (Person) session.createQuery("select p from Person p left join fetch p.events where p.id = :pid")‏.setParameter("pid", personId)‏.uniqueResult(); // Eager fetch the collection so we can use it detached Event anEvent = (Event) session.load(Event.class, eventId); session.getTransaction().commit(); // End of first unit of work aPerson.getEvents().add(anEvent); // aPerson (and its collection) is detached // Begin second unit of work Session session2 = HibernateUtil.getSessionFactory().getCurrentSession(); session2.beginTransaction(); session2.update(aPerson); // Reattachment of aPerson session2.getTransaction().commit(); }

10 Hibernate Core – Clase 2 Mapeo de Relaciones  Asociación unidireccional Colección de valores, se trata de una colección de valores y no de objetos de dominio como por ejemplo Eventos. Ejemplo, modelo de datos: _____________ __________________ | | | | _____________ | EVENTS | | PERSON_EVENT | | | ___________________ |_____________| |__________________| | PERSON | | | | | | | |_____________| | PERSON_EMAIL_ADDR | | *EVENT_ID | | *EVENT_ID | | | |___________________| | EVENT_DATE | | *PERSON_ID | | *PERSON_ID | | *PERSON_ID | | TITLE | |__________________| | AGE | | *EMAIL_ADDR | |_____________| | FIRSTNAME | |___________________| | LASTNAME | |_____________|

11 Hibernate Core – Clase 2 Mapeo de Relaciones  Asociación unidireccional Colección de valores, se trata de una colección de valores y no de objetos de dominio como por ejemplo Eventos. Ejemplo, clase de dominio Person: private Set emailAddresses = new HashSet(); public Set getEmailAddresses() { return emailAddresses; } public void setEmailAddresses(Set emailAddresses) { this.emailAddresses = emailAddresses; }

12 Hibernate Core – Clase 2 Mapeo de Relaciones  Asociación unidireccional Colección de valores Ejemplo, archivo de mapeo:

13 Hibernate Core – Clase 2 Mapeo de Relaciones  Asociación unidireccional Colección de valores Ejemplo, trabajando con una colección de valores: private void addEmailToPerson(Long personId, String emailAddress) { Session session = HibernateUtil.getSessionFactory().getCurrentSession(); session.beginTransaction(); Person aPerson = (Person) session.load(Person.class, personId); // adding to the emailAddress collection might trigger a lazy load of the collection aPerson.getEmailAddresses().add(emailAddress); session.getTransaction().commit(); }

14 Hibernate Core – Clase 2 Mapeo de Relaciones  Asociación bidireccional Es una asociación establecida desde ambos extremos de la asociación. Ejemplo, modelo de datos: _____________ __________________ | | | | _____________ | EVENTS | | PERSON_EVENT | | | |_____________| |__________________| | PERSON | | | | | |_____________| | *EVENT_ID | | *EVENT_ID | | | | EVENT_DATE | | *PERSON_ID | | *PERSON_ID | | TITLE | |__________________| | AGE | |_____________| | FIRSTNAME | | LASTNAME | |_____________| <----------------------------- Asociación unidireccional -------------------------------> Asociación unidireccional Asociación bidireccional

15 Hibernate Core – Clase 2 Mapeo de Relaciones  Asociación bidireccional Ejemplo, clase de dominio Event: private Set participants = new HashSet(); public Set getParticipants() { return participants; } public void setParticipants(Set participants) { this.participants = participants; }

16 Hibernate Core – Clase 2 Mapeo de Relaciones  Asociación bidireccional Ejemplo, archivo de mapeo

17 Hibernate Core – Clase 2 Configuración  Hibernate esta diseñado para trabajar con varios entornos diferentes, debido a esto posee una amplia colección de parámetros de configuración.  Es posible configurar a Hibernate a través de los siguientes puntos Vía programación Vía archivo.properties Vía archivo.xml

18 Hibernate Core – Clase 2 Configuración  Hibernate JDBC Properties Property name Purpose hibernate.connection.driver_class JDBC driver class hibernate.connection.url JDBC URL hibernate.connection.username database user hibernate.connection.password database user password hibernate.connection.pool_size maximum number of pooled connections

19 Hibernate Core – Clase 2 Configuración  Hibernate Datasource Properties Property name Purpose hibernate.connection.datasource datasource JNDI name hibernate.jndi.url URL of the JNDI provider (optional)‏ hibernate.jndi.class class of the JNDI InitialContextFactory (optional)‏ hibernate.connection.username database user (optional)‏ hibernate.connection.password database user password (optional)‏

20 Hibernate Core – Clase 2 Configuración  Hibernate SQL Dialects (hibernate.dialect)‏  RDBMSDialect  DB2org.hibernate.dialect.DB2Dialect  DB2 AS/400org.hibernate.dialect.DB2400Dialect  DB2 OS390org.hibernate.dialect.DB2390Dialect  PostgreSQLorg.hibernate.dialect.PostgreSQLDialect  MySQLorg.hibernate.dialect.MySQLDialect  MySQL with InnoDBorg.hibernate.dialect.MySQLInnoDBDialect  MySQL with MyISAMorg.hibernate.dialect.MySQLMyISAMDialect  Oracle (any version)org.hibernate.dialect.OracleDialect  Oracle 9iorg.hibernate.dialect.Oracle9iDialect  Oracle 10gorg.hibernate.dialect.Oracle10gDialect  Sybaseorg.hibernate.dialect.SybaseDialect  Sybase Anywhereorg.hibernate.dialect.SybaseAnywhereDialect  Microsoft SQL Serverorg.hibernate.dialect.SQLServerDialect  SAP DBorg.hibernate.dialect.SAPDBDialect  Informixorg.hibernate.dialect.InformixDialect  HypersonicSQLorg.hibernate.dialect.HSQLDialect

21 Hibernate Core – Clase 2 Configuración  Hibernate SQL Dialects (hibernate.dialect)‏  Ingresorg.hibernate.dialect.IngresDialect  Progressorg.hibernate.dialect.ProgressDialect  Mckoi SQLorg.hibernate.dialect.MckoiDialect  Interbaseorg.hibernate.dialect.InterbaseDialect  Pointbaseorg.hibernate.dialect.PointbaseDialect  FrontBaseorg.hibernate.dialect.FrontbaseDialect  Firebirdorg.hibernate.dialect.FirebirdDialect

22 Hibernate Core – Clase 2 Configuración  Hibernate Log Categories Category Function org.hibernate.SQL Log all SQL DML statements as they are executed org.hibernate.type Log all JDBC parameters org.hibernate.tool.hbm2ddlLog all SQL DDL statements as they are executed org.hibernate.pretty Log the state of all entities (max 20 entities) associated with the session at flush time org.hibernate.cache Log all second-level cache activity org.hibernate.transaction Log transaction related activity org.hibernate.jdbc Log all JDBC resource acquisition org.hibernate.hql.ast.AST Log HQL and SQL ASTs during query parsing org.hibernate.secure Log all JAAS authorization requests org.hibernate Log everything. This is a lot of information but it is useful for troubleshooting

23 Hibernate Core – Clase 2 Criteria Query  La interfaz org.hibernate.Criteria representa una consulta (query) para una clase persistente en particular.  La instancia de Session es una factory para Criterias  Ejemplo: Criteria crit = sess.createCriteria(Cat.class); crit.setMaxResults(50); List cats = crit.list();

24 Hibernate Core – Clase 2 Criteria Query  Filtrando una tabla Ejemplo 1: List cats = sess.createCriteria(Cat.class)‏.add( Restrictions.like("name", "Fritz%") )‏.add( Restrictions.between("weight", minWeight, maxWeight) )‏.list(); Ejemplo 2: List cats = sess.createCriteria(Cat.class)‏.add( Restrictions.like("name", "Fritz%") )‏.add( Restrictions.or( Restrictions.eq( "age", new Integer(0) ), Restrictions.isNull("age") ) )‏.list();

25 Hibernate Core – Clase 2 Criteria Query  Filtrando una tabla Ejemplo 3: Property age = Property.forName("age"); List cats = sess.createCriteria(Cat.class)‏.add( Restrictions.disjunction()‏.add( age.isNull() )‏.add( age.eq( new Integer(0) ) )‏.add( age.eq( new Integer(1) ) )‏.add( age.eq( new Integer(2) ) )‏ ) )‏.add( Property.forName("name").in( new String[] { "Fritz", "Izi", "Pk" } ) )‏.list();

26 Hibernate Core – Clase 2 Criteria Query  Ordenando resultados Ejemplo 1: List cats = sess.createCriteria(Cat.class)‏.add( Restrictions.like("name", "F%")‏.addOrder( Order.asc("name") )‏.addOrder( Order.desc("age") )‏.setMaxResults(50)‏.list(); Ejemplo 2: List cats = sess.createCriteria(Cat.class)‏.add( Property.forName("name").like("F%") )‏.addOrder( Property.forName("name").asc() )‏.addOrder( Property.forName("age").desc() )‏.setMaxResults(50)‏.list();

27 Hibernate Core – Clase 2 Criteria Query  Asociaciones Ejemplo 1: List cats = sess.createCriteria(Cat.class)‏.add( Restrictions.like("name", "F%") )‏.createCriteria("kittens")‏.add( Restrictions.like("name", "F%") )‏.list(); Ejemplo 2: List cats = sess.createCriteria(Cat.class)‏.createAlias("kittens", "kt")‏.createAlias("mate", "mt")‏.add( Restrictions.eqProperty("kt.name", "mt.name") )‏.list();

28 Hibernate Core – Clase 2 Criteria Query  Projections Ejemplo 1: List results = session.createCriteria(Cat.class)‏.setProjection( Projections.rowCount() )‏.add( Restrictions.eq("color", Color.BLACK) )‏.list(); Ejemplo 2: List results = session.createCriteria(Cat.class)‏.setProjection( Projections.projectionList()‏.add( Projections.rowCount() )‏.add( Projections.avg("weight") )‏.add( Projections.max("weight") )‏.add( Projections.groupProperty("color") )‏ )‏.list();

29 Hibernate Core – Clase 2 Referencias:  Hibernate reference Documentation.

30 Hibernate Core – Clase 2 Practica  Realizar el ejemplo definido en el tutorial de hibernate 3.5.1  Sección 1.3. Part 3 - The EventManager web application


Descargar ppt "Softlogia S.R.L. Formación de Recursos Humanos Hibernate Core Instructor: Martin R. Baspineiro."

Presentaciones similares


Anuncios Google