標準のドメインオブジェクトを持つ標準のSpring Roo(1.2.0.RC1)プロジェクトがあります。私の主なスレッド(ドメインコントローラ)では、データベースにバックアップされたドメインオブジェクト(Hibernate/MySQLを使用しています)のインスタンスをファインダを使用して作成し、いくつかのプロパティを変更し、変更を.persist()保存されるインスタンスに適用されます。新しいスレッドでSpring Rooで.persist()が動作しない
このロジック全体をRunnableに移動し、新しいスレッド(ScheduledThreadPoolExecutor.scheduleAtFixedRate()によって呼び出される)で実行すると、ファインダを使用してドメインオブジェクトのインスタンスを適切に作成できますが、保存するオブジェクトの.persist()を呼び出しても、DBには影響しません。コンソールログ(STS内で実行中)に何も表示されません。 Rooが作成する他のログファイルがあるかどうかは分かりませんが、これは何が起こっているかについての手がかりを与えてくれます。他の誰かが前述の問題を経験しましたか? RooのSTSコンソール(Hibernateクエリログなど)でより詳細なログを取得する方法を知っている人はいますか?
コードを表示します。また、Hibernate Sessionはシングルスレッドオブジェクトであり、トランザクションコンテキストはThreadLocal変数に依存することに注意してください。 –
詳細については、hibernateプロパティshow-sqlをpersistence.xmlに追加してください。 – Ilya
はい、Hibernateセッションは通常、ThreadLocal変数として保存されます。したがって、新しいスレッドで作成するオブジェクトにはHibernateセッションがありません。 – GreyBeardedGeek