2012-03-13 7 views
1

表にいくつかの値を挿入しようとしましたが、ORA-00001:固有制約違反です。 シーケンスがテーブルの最高のIDと同期していないことがわかりますが、シーケンス番号を修正してもエラーは引き続き発生します。 このエラーをより詳細にデバッグするには、oracleログでエラーが発生しますか?どのようにしてOracleログを見ることができますか? おかげ Priyank問題ORA-00001:INSERT/UPDATEに固有の制約違反が発生しました

更新:

:イベントを保存し、私たちはUserクラスで

だから、監査ログにエントリを記録し、我々は、監査ログのプラグインを使用していて、ユーザーのドメインクラスで、私たちはキャッチ

class User { 

//some attributes, constraints, mappings 

def onSave = { 
Graaudit aInstance = new Graaudit(); 
     aInstance.eventType= "GRA User Create" 
     aInstance.eventDescription = "GRA User Created" 
     aInstance.objectid = username 
     aInstance.objecttype = 'GRAUSER' 
     aInstance.user_id = RequestContextHolder.currentRequestAttributes().session.username 

      aInstance.withTransaction{ 
       aInstance.save() 
      } 
    } 

} 

上記のコードがonSaveイベントに含まれていないと、ユーザーは正常に作成されます。
私はaInstance上で使用しているhibernateトランザクションに関連していると想定しています。
我々は例外"org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here" ない おかげ

+0

シーケンスは唯一の制約ですか、それとも他にありますか? – thursdaysgeek

答えて

5

エラーメッセージが違反した制約の名前が含まれますどのようにこの問題を解決するには...確かに取得トランザクションを使用していけない場合は、複数の一意性制約があるかもしれません(テーブル上に)。あなたはINSERTにしようとしているユニーク制約は、あなたが影響を受けているかの列(複数可)を知ったら、あなたはデータを比較することができ

SELECT column_name, position 
    FROM all_cons_columns 
WHERE constraint_name = <<name of constraint from the error message>> 
    AND owner   = <<owner of the table>> 
    AND table_name  = <<name of the table>> 

に宣言されている列(複数可)を識別するために、その制約名を使用することができますかUPDATEを使用して、制約が違反している理由を判断します。

+0

また、次のクエリを使用することもできます。 'SELECT * FROM ALL_CONS_COLUMNS A ALL_CONSTRAINTS CをオンにするC.CONSTRAINT_NAME = C.CONSTRAINT_NAME WHERE C.CONSTRAINT_NAME LIKE '%SYS_C0010988%';'。最後に 'CONSTRAINT_NAME':' SYS_C0010988'をエラーメッセージのものと置き換えてください。 – Navigatron

1

Oracleのエラーメッセージは多少長くする必要があります。通常は次のようになります。

ORA-00001: unique constraint (TABLE_UK1) violated 

括弧内の名前はconstraitの名前です。違反した制約が表示されます。

+0

カッコ内に名前のない単なるドットの場合はどうなりますか?例:ORA-00001:一意制約(。)違反 – user1872384

1

このORAエラーは、ユニーク制約の違反のために発生しました。

ORA-00001:一意制約(CONSTRAINT_NAME)は、これが理由一意のインデックスによって制限フィールドに重複する値を作成したINSERTまたはUPDATEステートメントを実行しようとしているの原因とされて

に違反しました。

これを解決するには、制約を変更して重複を許可するか、一意制約を削除するか、重複した挿入を避けるためにSQLを変更します。

関連する問題