0

JPA エンティティの簡単な監査要件があります。作成日と最終変更日と作成者を保持します。作成者は、現在ログインしているユーザーである必要があります。

基本クラスまたは JPA インターセプター (追加のフレームワークなし) で注釈を@PrePersist使用してこれを実装したいと思います。@PreUpdate

ただし、どちらの場合も、HttpSession に格納されている現在ログインしているユーザーにアクセスする方法が必要です。

基本エンティティークラスのメソッドまたは JPA インターセプターからこの情報にアクセスするにはどうすればよいですか?

それを達成する方法に関するベストプラクティスまたはテスト済みの方法はありますか?

私は、リクエストごとに、ログインしたユーザーオブジェクトをグローバルに到達可能な ThreadLocal (たとえば、Spring シングルトンサービス内) に配置する Web インターセプターを追加して、どこからでも検索できるようにすることを考えていました...

それは良い考えのように聞こえますか?

どんな提案でも大歓迎です!

編集:ここで同様の質問が見つかりました(右側の提案を通じて自分自身を投稿した後にのみ見つかりました):JPAエンティティでcreatedByとupdatedByを自動的に設定します

結論は ThreadLocal の方向に進んでいるようです...それでも、どんなフィードバックも歓迎します!

4

1 に答える 1

0

リモート (EJB) 呼び出しを使用しない場合は、ThreadLocal を使用するアイデアが機能するはずです。ほとんどのコンテナーは、処理される要求ごとに 1 つのスレッドを使用するためです。コンテナーはおそらくスレッド プールを使用し、別の要求の処理に使用される可能性のあるスレッドにユーザー オブジェクトをアタッチしたままにしたくないため、ユーザーを配置するときと削除するときは注意が必要です。

于 2013-01-29T14:14:09.160 に答える