1

サロゲート主キーを使用するテーブルがあります。エンティティ (テーブル) の自然キーは名前空間 + 名前です。テーブルにアクセスする Web アプリケーションは、ユーザーがエンティティの任意のプロパティを更新できるようにする Web フォームをユーザーに提供します。ORMにHibernateを使用しています。session.update(entity) を発行する場合、Hibernate がデータベース内のレコードを識別できるように、エンティティの ID (代理キー) を入力する必要があります。これを行う2つの方法を考えることができます

(1)ID(非表示)をフロントエンドに渡し、フォームの更新時にビジネスレイヤーに戻ります

(2)自然キーのみを渡し、自然キーを使用してルックアップを行いますDAOレイヤーでIDを取得します。

自然キーは、フォームを使用して更新できないことに注意してください。オブジェクトの ID (名前空間 + 名前) を変更するための別の形式があり、同時実行性は問題ではありません。つまり、他の誰かが更新のためにロックを保持している間、誰も ID を変更できないため、自然キーを使用して検索すると、更新のリクエスト中に使用されたものと同じレコードが引き続き生成されます。

質問
(1)私が言及したもの以外に何かアプローチはありますか?
(2) これは通常、Web アプリケーションでどのように達成されますか?

検索してみましたが、これに関する情報はあまり見つかりませんでした。正しい言葉を選んで検索していない可能性があります。

4

1 に答える 1

1

どちらのアプローチも有効であり、これ以上何を言うべきかさえわかりません。これをどのように実装するかはあなた次第ですが、代理キーを使用していて第 2 レベルのキャッシュが有効になっている場合、キャッシュからエンティティが直接取得される可能性があり、これらの操作が頻繁に使用される場合はパフォーマンスが向上します。自然キーによる検索はキャッシュをバイパスします。

于 2012-09-15T13:39:52.200 に答える