Ho una classe di accesso ai dati che viene eseguita come parte di un'applicazione java autonoma. Attualmente sta funzionando, il che significa che è definito un gestore transazioni, ma voglio rifattorizzare la classe per ridurre l'ambito della transazione, ma se lo faccio ottengo org.hibernate.HibernateException: nessuna sessione di ibernazione legata al thread e la configurazione non consentire la creazione di uno non transazionale qui che implica che lo spostamento dello @Transactional ha in qualche modo impedito il riconoscimento.Come refactoring un metodo @Transactional per dividere le parti non transazionali
La mia versione originale aveva i metodi refactored come privati ma ho trovato una raccomandazione per cambiarli in pubblico in quanto in alcuni casi l'annotazione non verrebbe rilevata.
public class DoStuff {
@Transactional
public void originalMethod() {
// do database stuff
...
// do non-database stuff that is time consuming
...
}
}
Quello che voglio fare è refactoring al seguente
public class DoStuff {
public void originalMethod() {
doDatabaseStuff()
doNonDatabaseStuff()
}
@Transactional
public void doDatabaseStuff() {
...
}
public void doNonDatabaseStuff() {
...
}
}
Dov'è il tuo gestore delle transazioni? Puoi aggiungere ulteriori dettagli? – Chris
La tua classe DoStuff implementa qualsiasi interfaccia? –
Nessuna interfaccia e il gestore transazioni è definito come funziona per la classe originale. –