Grails 3.1.11 から 3.2.0 への更新後、コントローラーの 1 つのアクションが機能しなくなっていることに気付きました。
@Transactional(readOnly = true)
class RoomPlanController {
...
def show(RoomPlan roomPlan) {
...
}
def getRooms(RoomPlan roomPlan) {
...
}
}
問題は、呼び出しroomPlan/getRooms/1
roomPlan
が null であることです。同じパラメーターでアクションを呼び出すと、show
roomPlan が正しく設定されます。
コントローラー内で を呼び出すとgetErrors()
、次のエラー メッセージが表示されます。
現在の Hibernate セッションを取得できませんでした。ネストされた例外は org.hibernate.HibernateException: No Session found for current thread です
grails.artefact.Controller.initializeCommandObject に由来します。show
さらにデバッグした後、 と の間のスタックトレースの違いに気付きましたgetRooms
のスタックトレースshow
:
show:100, RoomPlanController (at.byte_code.businessSuite.hotel)
$tt__show:-1, RoomPlanController (at.byte_code.businessSuite.hotel)
doCall:-1, RoomPlanController$_show_closure13 (at.byte_code.businessSuite.hotel)
invoke0:-1, NativeMethodAccessorImpl (sun.reflect)
のスタックトレースgetRooms
:
getRooms:109, RoomPlanController (at.byte_code.businessSuite.hotel)
getRooms:-1, RoomPlanController (at.byte_code.businessSuite.hotel)
invoke0:-1, NativeMethodAccessorImpl (sun.reflect)
エラーメッセージと異なるスタックトレースから、データベースのセッション/トランザクションに何らかの関係があり@Transactional(readOnly = true)
、アクションに追加した後、grails 3.2.0 への更新前はすべてが期待どおりに機能していると推測できます。アノテーションを削除して再び失敗した場合。
他のコントローラーでは問題を確認できず、小規模なテスト プロジェクトで再現することもできませんでした。私たちはすでにプロジェクトを再構築しようとしましたが、そうではなかった完全に新しいワークステーションでも.
他の誰かがそのような問題を観察しましたか?