1

Annotationsでのみ休止状態を使用しています。私のテーブルは次のようになります。

@Entity
@Table(name = "NetworkType",
    uniqueConstraints = {@UniqueConstraint(columnNames = {"network_id", "type"})})

public class NetworkType implements Serializable {

    @Id
    private long id;

    @Column(name = "network_id", nullable = false)
    private long networkId;

    @Column(name = "type", nullable = false)
    private String type;
    ...

現在、同じNetworkTypeを2回書き込むと、UniqueConstraint(予想される)が原因で例外がスローされます。

私の考えは、チェックする前に最初にアイテムを読むことです。問題は、他のテーブルがこのテーブルを参照しているために必要なIDが主キーであるということです。

「network_id」と「type」のアイテムをクエリして、組み合わせがまだ存在しないことを確認するための最良の方法は何ですか?

クエリを使用して手動でこれを実行できることは知っていますが、より休止状態の方法で実行できますか?

一般に、PKを使用せずにオブジェクトを「取得」する適切な方法は何ですか?基準またはクエリは最良の方法ですか?

4

1 に答える 1

0

@UniqueConstraint主に、データベース スキーマ生成ツールでデータベース スキーマを作成するために使用されます。@UniqueConstraint使用すると、定義された一意の制約に記載されている列を含むテーブルが生成されます。

@UniqueConstraintデータ操作中の影響/使用はありません。

network_idおよび列で一意の制約動作を実現したい場合typeで、スキーマが既に作成されている場合は、データベース スキーマを更新して および 列を追加unique constraintnetwork_idますtype以下のように:

   ALTER TABLE NetworkType
   ADD CONSTRAINT uc_network_id_type UNIQUE (network_id, type)

お役に立てれば!

于 2012-10-14T04:07:40.363 に答える