Hola, estoy empezando con JPA, estoy utilizando la implementación de hibernate. Tengo definidos los pojos de mis entidades con las elaciones...y ya creada la base de datos y todo. Tengo una clase llamada CategoriasDao.java, en la cual tengo los metodos para insertar y eliminar de la base de datos, y estos me funcionan sin problema. Ahora he definido un nuevo metdo para modificar un registro y estoy teniendo probelmas al ejecutar un ejemplo de prueba, el codigo del metodo es el siguiente:
public void modificarCategoria(String nombreViejo, String nombreNuevo){
EntityManager em=ManUtil.getEntityManagerFactory().createEntityM anager();
try {
em.getTransaction().begin();
Categorias categoria=em.find(Categorias.class,nombreViejo);
if (categoria !=null){
categoria.setNombre(nombreNuevo);
//em.merge(categoria);
em.getTransaction().commit();
logger.info("Se ha cambiado la categoria "+nombreViejo+" por "+nombreNuevo);
}
}catch (PersistenceException Pe){
em.getTransaction().rollback();
logger.info("Se ha producido una exepción del bloque de persistencia al modificar la categoria");
throw Pe;
}
He probado con em.merge(), em.persist() hasta sin ponerlo. El problema es que me salta la siguiente excepción:
Exception in thread "main" java.lang.IllegalStateException: Transaction not active
at org.hibernate.ejb.TransactionImpl.rollback(Transac tionImpl.java:82)
at persistenciaJPA.dao.CategoriasDao.modificarCategor ia(CategoriasDao.java:89)
at persistenciaJPA.principal.main(principal.java:74)
Si quito el commit no me salta la excepcion, pero no me guarda lo cambios en la BD. Es como si me hubiese cerrado la transacción pero no se como resolverlo.
Muchas gracias