Pregunta

Lo siento por la pregunta noob, pero estoy teniendo problemas con JPA + Hibernate, así que pensé que algo no está claro en mi mente. Tengo algunas entidades, dicen A, B, C, D y he codificado AMethods, BMethods, CMethods, DMethods. Cada una de las clases * Los métodos de inicialización contienen EntityManager a través EntityManagerFactory y algunos métodos que, básicamente, ejecutar consultas. No sé si debo utilizar un patrón Singleton (por lo que tengo una clase EntityManager por * Método) o si necesito para abrir y cerrar el EntityManager cada vez que ejecute una consulta o persisto / eliminar una entidad ... puede que me ??

ayuda
¿Fue útil?

Solución

En una aplicación típica JPA / Hibernate, usted no pone persistencia lógica en las clases de entidad en sí. Este es un gran cambio en la filosofía de diseño en comparación con las aplicaciones EJB 2.x mayores. En cambio, muchas aplicaciones crean una capa de Data Access Objects - separado de las entidades - que las instancias de uso EntityManager a consulta, cargar y guardar entidades. A menudo, estos son únicos, y las instancias del gestor de entidad dentro de los DAOs local de la rosca.

Si utiliza un marco como la primavera, la gestión de los casos y transacciones EntityManager es completamente automático. Lo mismo con EJB 3, aunque no he usado que en un proyecto grande. Yo sugeriría leer el capítulo de la documentación del resorte en Mapeo objeto-relacional acceso a datos. Incluso si no terminan usando la primavera en su aplicación, el capítulo ofrece algunos buenos consejos sobre cómo estructurar su aplicación de una manera que separa capas de persistencia de las preocupaciones de las entidades de persistencia. Buena suerte!

Otros consejos

EntityManager se asocia con un contexto de persistencia. Utilice un patrón singleton si todas las entidades suyo están asociados con un contexto. Se utiliza JPA en el lado del servidor, ¿verdad? Si es así usted puede inicializado EntityManager en los métodos de arranque, init () en servlets.

al igual que este!

interfaz pública ProtokollDAOService {

/**
 * Fügt ein Protokollobjekt in die Datenbank hinzu.
 * 
 * @param object
 */
public void addProtokoll (ProtokollModel object);

/**
 * Läd aus einer Datenbank Protokoll-Elemente und fügt sie in eine Liste hinzu
 * 
 * @return List <ProtokollModel> Liste mit Protokoll-Elementen 
 */
public List <ProtokollModel> getProtokolls ();

/**
 * Liefert ein Protokoll-Element aus der Datenbank anhand der ID; 
 * 
 * @param id
 * @return ProtokollModel Protokoll-Element 
 */
public ProtokollModel getProtokollById (long id);

/**
 * Liefert eine Liste von Protokoll-Elementen anhand des Problem-Status 
 * 
 * @param solved
 * @return List <ProtokollModel> Liste mit Protokoll-Elementen   
 */
public List <ProtokollModel> getProtokollByProblemStatus (boolean solved);

/**
 * Liefert eine Liste von Protokoll-Elementen anhand des Aufgaben-Status 
 * 
 * @param ready
 * @return List <ProtokollModel> Liste mit Protokoll-Elementen
 */
public List <ProtokollModel> getProtokollByAufgabenStatus (boolean ready);

/**
 * Liefert ein Protokoll-Element anhand des Problems
 * 
 * @param problem
 * @return List <ProtokollModel> Liste mit Protokoll-Elementen   
 */
public List <ProtokollModel> getProtokollByProblem (String problem);

/**
 * Liefert ein Protokoll-Element anhand der Aufgabe
 * 
 * @param aufgabe
 * @return List <ProtokollModel> Liste mit Protokoll-Elementen
 */
public List <ProtokollModel> getProtokollByAufgabe (String aufgabe);

/**
 * Ausgabe der Protokoll-Tabelle
 * 
 */
public void printTable ();

}

clase pública implementa ProtokollDAOImpl ProtokollDAOService {     estática final privado Cadena PERSISTENCE_UNIT_NAME = "ProtokollManager";     privada EntityManagerFactory entityFactory;

/*
 * (non-Javadoc)
 * 
 * @see util.ProtokollDAOService#addProtokoll(model.ProtokollModel)
 */
public void addProtokoll(ProtokollModel object) {
    try
    {
        entityFactory = Persistence
                .createEntityManagerFactory(PERSISTENCE_UNIT_NAME);
        EntityManager em = entityFactory.createEntityManager();

        // Transaction starten
        em.getTransaction().begin();

        // Object zum speichern
        em.persist(object);

        // commit senden an die DB / Transaction abschliessen
        em.getTransaction().commit();

        // DB connection schliessen
        em.close();
    }
    catch (Exception e)
    {
        Logger.console("Exception wurde ausgelösst! " + e);
        e.printStackTrace();
    }
}

/*
 * (non-Javadoc)
 * 
 * @see util.ProtokollDAOService#getProtokollByAufgabe(java.lang.String)
 */
public List<ProtokollModel> getProtokollByAufgabe(String aufgabe) {
    // TODO Auto-generated method stub
    return null;
}

/*
 * (non-Javadoc)
 * 
 * @see util.ProtokollDAOService#getProtokollByAufgabenStatus(boolean)
 */
public List<ProtokollModel> getProtokollByAufgabenStatus(boolean ready) {
    // TODO Auto-generated method stub
    return null;
}

/*
 * (non-Javadoc)
 * 
 * @see util.ProtokollDAOService#getProtokollById(long)
 */
public ProtokollModel getProtokollById(long id) {
    try
    {
        entityFactory = Persistence
                .createEntityManagerFactory(PERSISTENCE_UNIT_NAME);
        EntityManager em = entityFactory.createEntityManager();

        // Transaction starten
        em.getTransaction().begin();

        // Object aus der DB laden
        Query q = em.createQuery("select m from ProtokollModel m where m.id=:id");

        // Parameter setzen - siehe PreparedStatment
        q.setParameter("id", id);

        // liefert das Protokoll-Element zurück 
        ProtokollModel pm = (ProtokollModel) q.getSingleResult();

        // commit senden an die DB / Transaction abschliessen
        em.getTransaction().commit();

        // db connection schliessen
        em.close();

        return pm;
    }
    catch (Exception e)
    {
        Logger.console("Exception wurde ausgelösst! " + e);
        e.printStackTrace();
    } finally {

    }

    return null;
}

/*
 * (non-Javadoc)
 * 
 * @see util.ProtokollDAOService#getProtokollByProblem(java.lang.String)
 */
public List<ProtokollModel> getProtokollByProblem(String problem) {
    // TODO Auto-generated method stub
    return null;
}

/*
 * (non-Javadoc)
 * 
 * @see util.ProtokollDAOService#getProtokollByProblemStatus(boolean)
 */
public List<ProtokollModel> getProtokollByProblemStatus(boolean solved) {
    // TODO Auto-generated method stub
    return null;
}

/*
 * (non-Javadoc)
 * 
 * @see util.ProtokollDAOService#getProtokolls()
 */
public List<ProtokollModel> getProtokolls() {
    // TODO Auto-generated method stub
    return null;
}

/*
 * (non-Javadoc)
 * 
 * @see util.ProtokollDAOService#printTable()
 */
public void printTable() {
    // TODO Auto-generated method stub
}

}

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top