读书人

升级Hibernate带来的ID生成策略有关问

发布时间: 2013-04-20 19:43:01 作者: rapoo

升级Hibernate带来的ID生成策略问题
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里运行的时候,每次插入一个新的Entity,就告诉我不能插入ID为NULL的记录。

ID明明做了注释:

@GeneratedValue(strategy = GenerationType.AUTO)

?应该插入的时候Hibernate自己生成值的……

?

左找,右找,找不到原因。

正郁闷的时候,随手点了下dist里面打包好的jar……

应用启动之后,新建了一个数据库……

再插入Entity……竟然正常了……

?

这时候注意到,IDE里测试用的数据库,是Hibernate3X生成的。

回想起来,之前用3x的时候,生成的id都是一长串的Long值(看起来比较像根据时间生成的)。

而在别的应用里,Hibernate4.2生成的数据库,id是顺序增加的。

?

怀疑,之前的Hibernate在处理GenerationType.AUTO的时候,是ORM赋值。

而新的Hibernate,会把这个问题交给数据库自己管理。

于是4.2建立的数据库,应该和3x时候不同(带分配ID的功能神马的)。

当用4.2向3x建立的数据库里插入数据的时候,由于ORM和数据库自身都没有分配ID。于是就出现了id为null的情况。

?

不知道serviceRegistry有没有什么属性,能设定:处理GenerationType.AUTO时,优先使用的策略。

目前这么看来,要想升级Hibernate还得写歌数据导入导出……

忒麻烦了,暂时搁置吧……

读书人网 >其他数据库

热点推荐