主キーは必ず正しく設定することが重要で、その理由はいくつかあります。
第 1 に、主キーとしてマークされるプロパティーが増えるにつれて、オブジェクトのキー・シグニチャーの計算にかかる費用は増えていきます。 User のすべてのフィールドが主キーとしてマークされた場合、システムはそれぞれの User について、それらのプロパティーの 1 つ 1 つにアクセスし、それらの各プロパティーの値を含んだシグニチャーを計算しなければなりません。 フィールドが別のオブジェクトの参照であれば、問題はより複雑になります。 そこで一般的な規則として、クライアント・データの主キーはデータベースの主キーの場合と同じ規則に従う必要があります。単一のフィールド、できれば整数フィールドが、最も効率的なキーです。 これより複雑なキーは、すべての単一有効フィールドが主キーにマークされているデフォルトで生成されたものも含み、最低限のキーと同様に動作しますが、速度は遅くなります。
第 2 に、主属性での参照の循環は避けなければなりません。 たとえば、User オブジェクトが Address を所有し、その Address に User オブジェクトを指すポインターがあり、user.address が主フィールドで、address.user も主フィールドの場合には、これら 2 つのオブジェクトの識別を判別しようとすると無限ループになります。 これは直観的なものですが、コードでコントロールするのは難しいことがあります。 この場合、Java オブジェクトに一貫性がある限り、システムは動作します。つまり、Address が指す Userオブジェクトが、Address オブジェクトを指す Java User オブジェクトとまったく同じで、theUser = theUser.getAddress().getUser() のような単純なオブジェクト参照等価テストが真を戻す場合です。
最後に、そしてこれは他の問題よりずっと難しい問題ですが、すべてのフィールドが主キーとみなされている場合 (デフォルト)、ある 1 つのオブジェクトに変更を加えると、そのオブジェクトの前の識別が失われたことになります。 すべてのフィールドが識別の一部であるため、どのような変更があっても識別が一定ではなくなります。 これはフレームワークの、より高度な機能を使用する場合には実際的な問題となり、たとえば WebServices では、ブラウザー上のユーザーによってすでに変更された可能性のあるオブジェクトについてサーバーから更新情報を得ることになっています。
ご利用条件 |
フィードバック
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved. (C) Copyright IBM Japan 2004