2013-07-26 100 views
5

フィールド名を取得すると、org.hibernate.exception.ConstraintViolationExceptionが発生します。 一意制約をチェックする唯一の確実な方法は、トランザクションコミットです。そのため、例外がスローされる前にチェックしても、だから私はユーザーの魔女フィールドと通信して保存問題を引き起こす必要があります。
詳細メッセージは多かれ少なかれ技術的であり、ユーザーが受け入れられないものです。また、することはできません、私は準備ができ、他の情報も。 IMO フィールド名は、私がオブジェクトから自分自身を取得することができ、問題の価値は十分ある:(データベースドライバに依存します...しかし、フィールド名ConstraintViolationExceptionを引き起こすフィールド名を抽出する

+0

あなたはこの投稿(https://forum.hibernate.org/viewtopic.php?p=2414824)を見ましたか? – Hippoom

+0

あなたの問題はhttp://stackoverflow.com/questions/2995042/how-to-extract-actual-entity-and-property-name-that-is-a-duplicate-from-hibernat?rqに似ているようです= 1。もしそれをしたいならば。データベースドライバに基づいています。 –

+0

私は@Hippoomが以前にリンクしたものを見ましたが、私はそれを古くからの知識として取っていました。それは '歯で石を彫る'のように見えます。また、私はHaimが指摘したことを見てきましたが、それは解決策ではありません...そしてまた時代遅れです。私はそれが可能であると信じています、それは私が考える非常に一般的な問題です。 – Saram

答えて

3

あなたはこのようにそれの原因によって例外とメッセージが表示されます:あなたはこの[SQL0407] Null values not allowed in column or variable GROUP00002.最後の言葉のようになりましたでしょう

try{ 
     t.commit(); 
    }catch (ConstraintViolationException e) { 
     e.getCause().getMessage();// 
    } 

あなたの列名です、そしてあなたは、あなたのフィールドに一致するように、それを翻訳することができます(静的HashMapを使用して多分)

+1

それは私が考え出した唯一の解決策です。しかし、私にとっては、それは実装に依存しません。私が知っているすべてのデータベースではメッセージが異なります。私はまた、データベースベンダーが将来それを変更しないと信じることはできません:( – Saram

関連する問題