1

AccessCard であるエンティティがあり、ブール値フィールドを「アクティブ」にしたいと考えています。たとえば、複数の人が AccessCard を持っている可能性がありますが、現在の所有者でのみ有効です。現在の所有者は有効なフィールド = true になり、以前の所有者はすべて有効なフィールド = false になります。

明らかに、これをインターフェイス側で処理し、非アクティブ化する前にカードをアクティブ化できないようにすることもできますが、データベースでもこの制約が必要です。

「アクティブ」列に注釈を付ける方法はありますか?

4

2 に答える 2

2

どの RDBMS を使用していますか? Oracleでは、受け入れられた回答HEREのようなことを行うことができます。

フィールド値に基づいて制約を作成できるJPAアノテーションはないと思います。フィールドリストに制約を作成できるものがありますが@UniqueConstraint、フィールド値はまだ考慮されていません(active=trueforを使用してレコードを 1 つだけ保持し、 を使用AccessCardして多くのレコードを使用するためactive=false)。

あなたができることは、プライベートゲッターを作成してアクセスカードの割り当てを取得し、アクティブなカード割り当てを返すためのパブリック一時メソッドを作成することです。初めて呼び出されると、すべての割り当てが繰り返され、アクティブな割り当てが選択されてプロパティに割り当てられるため、getActiveAssignment が呼び出されるたびにすべての割り当てを繰り返す必要がなくなります。アクティブな割り当てのセッターでは、すべての割り当てに対してアクティブを false に設定し、予想される割り当てに対して true を設定できます。

于 2013-08-10T15:50:20.513 に答える