Método adecuado para escribir funciones de hibernación

Estoy usando hibernate en mi proyecto y está yendo bien, pero mi problema es que estoy un poco confundido, es decir, voy por buen camino para escribir funciones de hibernate. A continuación, pego mi bloque de código para comprender cómo había escrito las funciones de hibernación, verifíquelo y dígame si es un método correcto. Aquí está mi estructura de código de bloque

SessionFactory sessionFactory = 
                (SessionFactory) ServletActionContext.getServletContext().getAttribute(HibernateListener.KEY_NAME);
        Session hibernatesession = sessionFactory.openSession();
        try {
            hibernatesession.beginTransaction();
            // my database access will be here
            hibernatesession.getTransaction().commit();
            hibernatesession.flush();
            }
        catch(Exception e){
          hibernatesession.getTransaction().rollback();
          e.printStackTrace();
        }finally{
          hibernatesession.close();
        }

Esta es la estructura que he creado para todas mis funciones de clase dao, pero ahora mi sitio web se está cargando muy lentamente. Entonces, mi pregunta es que la restricción que he usado es correcta. Es el código anterior hace que se abran múltiples sesiones de hibernación a la vez.

Respuesta 1

No es un buen diseño hacer gestión de transacciones en una clase DAO. Recomiendo encarecidamente usar Spring y su gestión de transacciones declarativa, que es muy fácil de configurar y fácil de usar. Si eso no está disponible para usted, entonces al menos debe hacer la alternativa de un hombre pobre. Una sugerencia es hacer que cada DAO sea una subclase de una clase que tiene un método que hace la parte repetitiva (sesión abierta / cerrada, inicio / confirmación de transacción) y llama a un método reemplazable para hacer el trabajo real. Esto implementaría el patrón de plantilla para su escenario. Este es un resumen:

public abstract class DaoTemplate
{
  public void execute() {
    final Session s = ((SessionFactory) ServletActionContext.getServletContext()
        .getAttribute(HibernateListener.KEY_NAME)).openSession();
    try {
      s.beginTransaction();
      doTheRealStuff();
      s.getTransaction().commit();
    }
    catch(Exception e) {
      s.getTransaction().rollback();
      e.printStackTrace();
    } finally { s.close(); }
  }

  protected abstract void doTheRealStuff();
}

Otra sugerencia, y algo que realmente usé en un proyecto hace diez años, es implementar el patrón de Estrategia . En ese caso, le pasarías un objeto executeque implementa el método doTheRealStuff. Además, en ese caso, la DaoTemplateclase podría ser un singleton (un nombre diferente para la clase sería apropiado entonces).

Respuesta: 2

¿Cómo puedo arreglar esto? Eclipse no reconoce esta función: listFiles (Filter paramFileFilter) Vea estas capturas de pantalla:

Por alguna razón, no puedo obtener el complemento Maven Surefire para ejecutar mis pruebas secuencialmente. Utilizo un simulacro de redis (https://github.com/kstyrc/embedded-redis) en mis pruebas, y funciona muy bien, pero obtengo errores como ...

Estoy usando lo siguiente: int i = Integer.parseInt (args [2]); ¿Hay alguna otra forma de obtener un número entero de una cadena? Si el número es realmente pequeño, entonces haz los objetos Byte y Char ...

Tengo múltiples JTextFields y JComboBox en mi JFrame. Entonces, cada vez que haga clic en el botón _Agregar_, verificará si los cuatro (4) campos de texto en el Panel de medicación actual están vacíos. Si no es así, Ejecutar, ...