我有一個數據訪問類,它作爲獨立Java應用程序的一部分運行。它目前正在工作,這意味着一個事務管理器被定義,但我想重構該類以減少事務的範圍,但是如果我這樣做,我會得到org.hibernate.HibernateException:沒有Hibernate會話綁定到線程,並且配置沒有允許在這裏創建非事務性的一個,這意味着移動@Transactional已經以某種方式阻止了它被識別。你如何重構@Transactional方法來拆分非事務性部分
我原來的版本有重構的方法是私人的,但我找到了一個建議,將其改爲public,因爲在某些情況下,註釋不會被拾取。
public class DoStuff {
@Transactional
public void originalMethod() {
// do database stuff
...
// do non-database stuff that is time consuming
...
}
}
我想要做的是重構以下
public class DoStuff {
public void originalMethod() {
doDatabaseStuff()
doNonDatabaseStuff()
}
@Transactional
public void doDatabaseStuff() {
...
}
public void doNonDatabaseStuff() {
...
}
}
你的交易經理在哪裏?你能添加更多細節嗎? – Chris
你的類DoStuff是否實現了任何接口? –
沒有接口,並且事務管理器被定義爲它對原始類的作用。 –