Accès aux données via JPA

1/8
100%

<!-- Slide number: 1 -->

Accès aux donnéesvia JPA

Frédéric Claux - 2019

<!-- Slide number: 2 -->

Plan

Données et état des données dans JPA

Insertion de données

Suppression de données

Mise à jour de données

Requêtage

<!-- Slide number: 3 -->

Publicité

Etat des données en JPA

![2016-07-11_13-38-11](Picture2.jpg)

https://www.baeldung.com/hibernate-save-persist-update-merge-saveorupdate

Notes:

https://www.baeldung.com/hibernate-save-persist-update-merge-saveorupdate

<!-- Slide number: 4 -->

Insertion de données

Suppliers s = new Suppliers();

// Ne pas specifier de clé primaire si elle est autogénérée

// s.setId(id);

s.setFirstName("Jean");

Publicité

s.setLastName("Dupont");

m_EM.getTransaction().begin();

m_EM.persist(s);

m_EM.getTransaction().commit();

<!-- Slide number: 5 -->

Suppression de données

m_EM.getTransaction().begin();

m_EM.remove(s);

m_EM.getTransaction().commit();

<!-- Slide number: 6 -->

Mise à jour de données

Publicité

Suppliers s = m_EM.find(Suppliers.class, 2);

m_EM.getTransaction().begin();

s.setFirstName("Jane");

m_EM.merge(s);

m_EM.flush();

m_EM.getTransaction().commit();

<!-- Slide number: 7 -->

Requêtage

JPQL

Pour: simple, très proche du SQL

Contre: typage fort contrôlé par l’IDE à l’intérieur même des chaines de caractères, mais seulement dans les @NamedQuery

Publicité

CriteriaQuery

Pour: fortement typé

Contre: très verbeux

<!-- Slide number: 8 -->

Requêtage – exemple

JPQL

SELECT c FROM Country c WHERE population > :p

CriteriaQuery

CriteriaQuery<Country> q = cb.createQuery(Country.class);Root<Country> c = q.from(Country.class);ParameterExpression<Integer> p = cb.parameter(Integer.class);q.select(c).where(cb.gt(c.get(Country_.population), p));

S’exercer durant les travaux pratiques

Accès aux données via JPA

Programming, Data Access, JPA · course

Browse all programmation documents

<!-- Slide number: 1 -->

Accès aux donnéesvia JPA

Frédéric Claux - 2019

<!-- Slide number: 2 -->

Plan

Données et état des données dans JPA

Insertion de données

Suppression de données

Mise à jour de données

Requêtage

<!-- Slide number: 3 -->

Advertisement

Etat des données en JPA

![2016-07-11_13-38-11](Picture2.jpg)

https://www.baeldung.com/hibernate-save-persist-update-merge-saveorupdate

Notes:

https://www.baeldung.com/hibernate-save-persist-update-merge-saveorupdate

<!-- Slide number: 4 -->

Insertion de données

Suppliers s = new Suppliers();

// Ne pas specifier de clé primaire si elle est autogénérée

// s.setId(id);

s.setFirstName("Jean");

Advertisement

s.setLastName("Dupont");

m_EM.getTransaction().begin();

m_EM.persist(s);

m_EM.getTransaction().commit();

<!-- Slide number: 5 -->

Suppression de données

m_EM.getTransaction().begin();

m_EM.remove(s);

m_EM.getTransaction().commit();

<!-- Slide number: 6 -->

Mise à jour de données

Advertisement

Suppliers s = m_EM.find(Suppliers.class, 2);

m_EM.getTransaction().begin();

s.setFirstName("Jane");

m_EM.merge(s);

m_EM.flush();

m_EM.getTransaction().commit();

<!-- Slide number: 7 -->

Requêtage

JPQL

Pour: simple, très proche du SQL

Contre: typage fort contrôlé par l’IDE à l’intérieur même des chaines de caractères, mais seulement dans les @NamedQuery

Advertisement

CriteriaQuery

Pour: fortement typé

Contre: très verbeux

<!-- Slide number: 8 -->

Requêtage – exemple

JPQL

SELECT c FROM Country c WHERE population > :p

CriteriaQuery

CriteriaQuery<Country> q = cb.createQuery(Country.class);Root<Country> c = q.from(Country.class);ParameterExpression<Integer> p = cb.parameter(Integer.class);q.select(c).where(cb.gt(c.get(Country_.population), p));

S’exercer durant les travaux pratiques