Anulando el unitName de contexto persistente declarado para EntityManager en una clase principal.

Tengo una clase DAO genérica que se ve así:

public class GenericDaoJpa <T extends DomainObject> implements GenericDao<T> {

    private final Class<T> type;

    @PersistenceContext(type=PersistenceContextType.TRANSACTION, unitName="myPersistenceUnit")
    protected EntityManager entityManager;

    public GenericDaoJpa(Class<T> type) {
        super();
        this.type = type;
    }

    public void setEntityManager(EntityManager entityManager) {
        this.entityManager = entityManager;
    }

    public T get(Object id) {
        return (T) entityManager.find(type, id);
    }
}

La implementación de la clase DAO se ve así:

    @Repository("appDao")
    public class ProductDaoJpa extends GenericDaoJpa<Product> implements ProductDao{

    public ProductDaoJpa() {
        super(Product.class);
    }

    public List<Product> getAllProducts() {
        return getAll();
    }   
}

Configuré otra unidad persistente llamada mySecondPersistenceUnit para una base de datos diferente. Me gustaría crear una nueva clase DAO que también extienda la clase GenericDaoJpa pero use una unidad persistente diferente. ¿Cómo puedo extender la clase GenericDaoJpa pero usar una unidad persistente diferente para cada DAO?

Intenté mover esta declaración a cada una de las clases DAO, pero esto hace que la clase principal no se compile porque no tiene ninguna referencia al EntityManager.

@PersistenceContext(type=PersistenceContextType.TRANSACTION, unitName="myPersistenceUnit")
protected EntityManager entityManager;

preguntado el 22 de mayo de 12 a las 15:05

1 Respuestas

Trate de usar la inyección de método en su lugar:

public class GenericDaoJpa <T extends DomainObject> implements GenericDao<T> {

    @PersistenceContext(type=PersistenceContextType.TRANSACTION, unitName="myPersistenceUnit")
    public void setEntityManager(EntityManager entityManager) {
        this.entityManager = entityManager;
    }
}

Mientras que la clase infantil que necesita usar diferentes PU:

@Repository("appDao")
public class ProductDaoJpa extends GenericDaoJpa<Product> implements ProductDao{

    @Override
    @PersistenceContext(type=PersistenceContextType.TRANSACTION, unitName="mySecondPersistenceUnit")
    public void setEntityManager(EntityManager entityManager) {
        this.entityManager = entityManager;
    }
}

contestado el 22 de mayo de 12 a las 15:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.