All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.sf.jstuff.integration.persistence.jpa.JPAUtils Maven / Gradle / Ivy

/*
 * Copyright 2010-2022 by Sebastian Thomschke and contributors.
 * SPDX-License-Identifier: EPL-2.0
 */
package net.sf.jstuff.integration.persistence.jpa;

import java.util.function.Supplier;

import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.persistence.Query;

import org.eclipse.jdt.annotation.Nullable;

/**
 * @author Sebastian Thomschke
 */
public abstract class JPAUtils {

   /**
    * Changes question marks in a query string to positional question marks.
    *
    * E.g. "?, ?, ?" becomes "?1, ?2, ?3"
    */
   public static String enumerateQuestionMarks(final String queryString) {
      if (queryString.isEmpty())
         return "";

      final var out = new StringBuilder();
      int startSearchAt = 0, foundAt = 0;

      for (int i = 1; (foundAt = queryString.indexOf('?', startSearchAt)) >= 0; i++) { // CHECKSTYLE:IGNORE InnerAssignment
         final String replaceValue = "?" + i;
         out.append(queryString, startSearchAt, foundAt).append(replaceValue);
         startSearchAt = foundAt + 1;
      }
      return out.append(queryString, startSearchAt, queryString.length()).toString();
   }

   public static final void executeTransactional(final EntityManager em, final Runnable code) {
      final EntityTransaction tx = em.getTransaction();
      tx.begin();
      try {
         code.run();
         tx.commit();
      } catch (final RuntimeException ex) {
         tx.rollback();
         throw ex;
      }
   }

   public static final  T executeTransactional(final EntityManager em, final Supplier code) {
      final EntityTransaction tx = em.getTransaction();
      tx.begin();
      try {
         final T result = code.get();
         tx.commit();
         return result;
      } catch (final RuntimeException ex) {
         tx.rollback();
         throw ex;
      }
   }

   public static final  T mergeTransactional(final EntityManager em, final T entity) {
      final EntityTransaction tx = em.getTransaction();
      tx.begin();
      try {
         final T result = em.merge(entity);
         tx.commit();
         return result;
      } catch (final RuntimeException ex) {
         tx.rollback();
         throw ex;
      }
   }

   public static void setParameters(final Query query, final Object @Nullable... parameters) {
      if (parameters != null) {
         for (int i = 0; i < parameters.length; i++) {
            query.setParameter(i + 1, parameters[i]);
         }
      }
   }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy