HibernateのアップグレードによるID生成ポリシーの問題


以前は小さなアプリを書いていましたが、埋め込みJavaDB+Hibernate 3.6以前のバージョンを使っていました(具体的には覚えていませんが、とにかくbuildSessionFactory()はまだ時代遅れの時ではありません)
最近彼をHibernate 4.2.0に変えたい.
本来なら、buildSessionFactory()を、このように変更します.
            Properties properties = configuration.getProperties();
            ServiceRegistryBuilder serviceRegistryBuilder = new ServiceRegistryBuilder().applySettings(properties);
            serviceRegistry = serviceRegistryBuilder.buildServiceRegistry();
            sessionFactory = configuration.buildSessionFactory(serviceRegistry);

 閉じるときにdestroyをクリックします.
        if (serviceRegistry instanceof StandardServiceRegistryImpl) {
            ((StandardServiceRegistryImpl) serviceRegistry).destroy();
        }

 いいですね.
 
誰が考えて、IDEで実行する時、毎回1つの新しいEntityを挿入して、私にIDがNULLの記録を挿入することができないことを教えます.
IDにコメントしたのに:
@GeneratedValue(strategy = GenerationType.AUTO)

 挿入すべき時にHibernate自身が値を生成する…
 
左を探して、右を探して、原因が見つかりません.
気がふさいでいると、distの中に梱包されたjarを手当たり次第に注文して・・・
アプリケーションが起動すると、新しいデータベースが作成されました.
さらにEntityを挿入すると・・・なんと正常に・・・
 
このとき、IDEでテスト用のデータベースは、Hibernate 3 Xによって生成されていることに気づきます.
思い起こせば,以前3 xを用いた場合,生成されたidはいずれも長い列のLong値であった(時間によって生成されたように見える).
別のアプリケーションでは,Hibernate 4.2で生成されたデータベースはidが順次増加する.
 
疑わしいのは、以前のHibernateがGenerationType.AUTOを処理していたとき、ORM賦値だったということです.
新しいHibernateは、この問題をデータベースに任せて自分で管理します.
そこで4.2で作成したデータベースは,3 x時とは異なるはずである.
4.2で3 xで作成したデータベースにデータを挿入した場合、ORMとデータベース自体にIDが割り当てられていないためです.そこでidがnullの場合が現れた.
 
サービスレジストリに何の属性があるのかわからず、GenerationType.AUTOを扱う際に優先的に使うポリシーを設定できます.
今のところ、Hibernateをアップグレードするには歌データを書いてエクスポートしなければなりませんが...
面倒くさいから、しばらく置いておこうかな・・・