Tengo una clase de acceso a datos que se ejecuta como parte de una aplicación java independiente. Actualmente está trabajando, lo que significa que se ha definido un administrador de transacciones, pero quiero refactorizar la clase para reducir el alcance de la transacción, pero si lo hago obtengo org.hibernate.HibernateException: ninguna sesión de Hibernate vinculada al hilo, y la configuración no permite la creación de uno no transaccional aquí que implica que mover el @Transactional de alguna manera ha impedido que se reconozca.Cómo se refactoriza un método @Transactional para dividir partes no transaccionales
Mi versión original tenía los métodos reajustados siendo privados pero encontré una recomendación para cambiar eso a público ya que en algunos casos la anotación no se recogió.
public class DoStuff {
@Transactional
public void originalMethod() {
// do database stuff
...
// do non-database stuff that is time consuming
...
}
}
Lo que quiero hacer es perfeccionar por la siguiente
public class DoStuff {
public void originalMethod() {
doDatabaseStuff()
doNonDatabaseStuff()
}
@Transactional
public void doDatabaseStuff() {
...
}
public void doNonDatabaseStuff() {
...
}
}
¿Dónde está su administrador de transacciones? ¿Puedes agregar más detalles? – Chris
¿Su clase DoStuff implementa alguna interfaz? –
Sin interfaces, y el administrador de transacciones se define como funciona para la clase original. –