Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| de:modul:ffit:3-jahr:java:learningunits:lu05:c [2025/09/16 10:16] – apeter | de:modul:ffit:3-jahr:java:learningunits:lu05:c [2025/09/18 02:29] (aktuell) – apeter | ||
|---|---|---|---|
| Zeile 56: | Zeile 56: | ||
| </ | </ | ||
| - | {{: | + | {{: |
| + | <code java> | ||
| + | public abstract class AbstractPersistor< | ||
| + | protected final Logger log = LoggerFactory.getLogger(this.getClass()); | ||
| + | private final EntityManagerFactory emf; | ||
| + | protected AbstractPersistor() { | ||
| + | this.emf = Persistence.createEntityManagerFactory(" | ||
| + | } | ||
| + | |||
| + | public void save(T t) { | ||
| + | executeTransaction(em -> em.merge(t)); | ||
| + | } | ||
| + | |||
| + | protected void executeTransaction(Consumer< | ||
| + | try (EntityManager em = emf.createEntityManager()) { | ||
| + | try { | ||
| + | em.getTransaction().begin(); | ||
| + | action.accept(em); | ||
| + | em.getTransaction().commit(); | ||
| + | } catch (RuntimeException e) { | ||
| + | if (em.getTransaction().isActive()) { | ||
| + | em.getTransaction().rollback(); | ||
| + | } | ||
| + | log.error(" | ||
| + | throw e; | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | |||
| + | @Override | ||
| + | public void close() { | ||
| + | if (emf != null && emf.isOpen()) { | ||
| + | emf.close(); | ||
| + | log.info(" | ||
| + | } | ||
| + | } | ||
| + | |||
| + | </ | ||
| + | |||
| + | <code java> | ||
| + | try (var bookPersistor = new BookPersistor()){ | ||
| + | bookPersistor.save(myBook); | ||
| + | } | ||
| + | </ | ||