error "saveOrUpdate is not valid without active transaction" hibernate 4.1 Spring 3.1
Estoy haciendo una configuracion con hibernate 4.1.3 y Spring 3.1 y al ejecutar la aplicacion con tomcat 7 crea las tablas de las entities en la base de datos pero al momento de almacenar un dato de prueba manda el error "saveOrUpdate is not valid without active transaction". esto es lo mas importante de las configuraciones para que vean y le den una checada:
applicationContext.xml
-
-
<tx:annotation-driven transaction-manager="transactionManager"/>
-
<context:component-scan base-package="mx.hiber" />
-
-
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
-
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
-
<property name="url" value="jdbc:mysql://127.0.0.1/ejemplo" />
-
<property name="username" value="ejemplo" />
-
<property name="password" value="ejemplo" />
-
</bean>
-
-
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
-
<property name="dataSource" ref="dataSource"/>
-
<property name="annotatedClasses">
-
<list><value>mx.hiber.Dto.Ejemplo</value></list></property>
-
<property name="hibernateProperties">
-
<props>
-
<prop key="hibernate.hbm2ddl.auto">update</prop>
-
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
-
<prop key="hibernate.show_sql">false</prop>
-
<prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate4.SpringSessionContext</prop>
-
<prop key="hibernate.current_session_context_class">thread</prop>
-
<prop key="hibernate.transaction.factory_class">org.hibernate.engine.transaction.internal.jdbc.JdbcTransactionFactory</prop>
-
</props>
-
</property>
-
</bean>
-
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
-
<property name="sessionFactory" ref="sessionFactory" />
-
</bean>
-
pageactions-servlet.xml
-
-
<context:component-scan base-package="mx.hiber" />
-
<mvc:annotation-driven />
-
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
-
<property name="prefix" value="/WEB-INF/ejemplo/"/>
-
<property name="suffix" value=".jsp"/>
-
</bean>
Entity
public class Ejemplo {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="id_user_rol")
private int idUserRol;
private String state;
public int getIdUserRol() {
return this.idUserRol;
}
public void setIdUserRol(int idUserRol) {
this.idUserRol = idUserRol;
}
public String getState() {
return this.state;
}
public void setState(String state) {
this.state = state;
}
}
DAO
public class EjemploDao {
@Autowired
private SessionFactory sessionFactory;
public void guardar(Ejemplo ejemplo) {
sessionFactory.getCurrentSession().saveOrUpdate(ejemplo);
}
}
/*En la capa de servicio se manda a llamar asi */
@Autowired
private EjemploDao ejemploDao;
@Transactional
public void almacenar(){
Ejemplo ejemplo = new Ejemplo();
ejemplo.setState("Dato a almacenar");
ejemploDao.guardar(ejemplo);
}
Los Jar los tome de proyectos correspondientes.
Este es el pequeño proyecto solo para iniciar a trabajar pero no funciona de forma completa.
Aguien tiene alguna idea de por que no funciona?
Saludos.
- avefenix_x's blog
- Inicie sesión o regístrese para enviar comentarios
Comentarios
Prueba algo asi..
session = sessionFactory.openSession();
transaction = session.beginTransaction();
transaction.begin();
session.saveOrUpdate(something);
transaction.commit();
session.close();
Practicamente el mismo error
Practicamente manda el mismo error de hecho al metodo le antepongo @Transactional que se me paso ponerlo en la parte del codigo del servicio. esto indica que habra una transaccion. voy a modificar el codigo para poner la annotations .
Este es el error que me genero el codigo que me recomendastes
org.hibernate.TransactionException: nested transactions not supported
Voy a seguir intentando que funcione si tengo algo antes lo publicare saludos.
Gracias por el comentario.