2009-12-03 15 views
7

これで、Spring Hibernateアプリケーションを立ち上げたばかりで、マッピングファイルを正しく取得できないようです。私はMySql 5と自動インクリメントキーを使用しています。ここに私のマッピングファイルのID部分があります。ここで自動インクリメントIDでHibernateの問題MYSQL 5

<hibernate-mapping> 
    <class name="org.XXXXXXX.Contact" table="contact"> 
     <id name="id" column="id" type="int" unsaved-value="null"> 
      <generator class="native" /> 
     </id> 

は、SQLが接触(タイトル、FIRST_NAME、MIDDLE_NAME、LAST_NAME、接尾辞、のjob_title、DOB、passport_number、passport_expiration、雇用主、dietary_restrictions、secondary_contact_fname、secondary_contact_lname、secondary_contact_mname、挿入

を生成しています緊急連絡先電話番号、緊急連絡先電話番号、緊急連絡先電話番号、緊急連絡先電話番号、緊急連絡先電話番号、緊急連絡先電話番号、緊急連絡先電話番号、is_company) ?、?、?、?)

org.hibernate.AssertionFailure:ここ は、スタックトレースの重要な部分であるorg.XXXXXXX.Contactエントリにヌルidは私が持っている

(例外が発生した後にセッションをフラッシュしないでください)保存されていない値を "0"と "-1"に設定し、ワイヤで送信しようとしました。私が間違っていることに関するアイデアは?

答えて

10

Hibernateは永続化レイヤーであり、オブジェクトがデータベース内のどこにあるかを追跡できる必要があることを覚えておく必要があります。だから、それが挿入を行うとき、実際には次のIDが何であるべきかを見るために自動増分カウンターに問い合わせる必要があります。 IDをオブジェクトに挿入し、そのオブジェクトをデータベースに挿入します。だから、hibernateがインサートで行うには、(アプリケーションによって生成された何らかの種類のGUIDを使用していない限り)selectを最初に行う必要があります。 mySQL自動インクリメントを使用する場合は、「ID」ジェネレータを使用します。様々な発電機の

説明:

http://www.roseindia.net/hibernate/hibernateidgeneratorelement.shtml

休止XMLコードスニペット:

<id name="id" type="long" unsaved-value="null" > 
    <column name="uid" not-null="true"/> 
    <generator class="identity"/> 
</id> 
+0

ジェネレータクラスの変更は機能しました。提供されたリンクを通して、私は自分の問題を解決することができました。私はアイデンティティよりも増分を訴えてしまった。ありがとう! –

0

"インクリメント" ジェネレータは、フレンドリークラスタされていません。他のプロセスが同じテーブルに挿入する場合次のハイバーネイトからの挿入は失敗します

関連する問題