HibernateのアップグレードによるID生成ポリシーの問題
以前は小さなアプリを書いていましたが、埋め込みJavaDB+Hibernate 3.6以前のバージョンを使っていました(具体的には覚えていませんが、とにかくbuildSessionFactory()はまだ時代遅れの時ではありません)
最近彼をHibernate 4.2.0に変えたい.
本来なら、buildSessionFactory()を、このように変更します.
閉じるときにdestroyをクリックします.
いいですね.
誰が考えて、IDEで実行する時、毎回1つの新しいEntityを挿入して、私にIDがNULLの記録を挿入することができないことを教えます.
IDにコメントしたのに:
挿入すべき時に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をアップグレードするには歌データを書いてエクスポートしなければなりませんが...
面倒くさいから、しばらく置いておこうかな・・・
最近彼を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をアップグレードするには歌データを書いてエクスポートしなければなりませんが...
面倒くさいから、しばらく置いておこうかな・・・