我有一個標準Spring Roo(1.2.0.RC1)項目,帶有標準域對象。在我的主線程(域控制器)中,我可以使用查找器創建由數據庫支持的域對象(我使用Hibernate/MySQL)的實例,更改一些屬性並通過調用.persist()將這些更改持久保存到數據庫中在要保存的實例上。.persist()在Spring Roo中無法在新線程中工作
如果我這整個邏輯移動到一個Runnable,並在一個新的線程(由ScheduledThreadPoolExecutor.scheduleAtFixedRate()調用),我仍然可以正常創建使用取景器,但改變一些屬性的域對象的情況下,執行它,對要保存的對象調用.persist()對DB沒有影響。我在控制檯日誌中看不到任何內容(在STS內部運行)。我不知道Roo是否創建了任何其他日誌文件,這可能會給我提供更多關於可能發生的線索的線索。有沒有人遇到過上述問題?有誰知道如何在STS控制檯中獲得更詳細的日誌記錄(例如Hibernate查詢日誌記錄)嗎?
顯示我們的代碼。並且請注意,Hibernate Session是單線程對象,並且事務上下文依賴於ThreadLocal變量。 – 2012-02-17 22:41:19
將休眠屬性show-sql添加到persistence.xml以獲取更多信息 – Ilya 2012-02-17 22:55:04
是的,Hibernate會話通常存儲爲ThreadLocal變量 - 因此您在新線程中創建的對象沒有Hibernate會話。 – GreyBeardedGeek 2012-02-22 02:07:28