hibernate 版本不同,创建SessionFactory方法不同
hibernate5 创建方法为:
StandardServiceRegistry standardRegistry = new StandardServiceRegistryBuilder()
.configure().build();
Metadata metadata = new MetadataSources(standardRegistry)
.getMetadataBuilder()
.applyImplicitNamingStrategy(
ImplicitNamingStrategyJpaCompliantImpl.INSTANCE)
.build();
sessionFactory = metadata.getSessionFactoryBuilder().build();
Hibernate5不再显式的使用Configuration类代表配置信息,而是新增了一个Metadata类来处理,SessionFactory的创建从Metadata实例中获得一个创建者,然后调用改创建者的build()方法获得SessionFactory。这是典型的创建者模式。
若依旧在Hibernate5中使用Hibernate4创建SessionFactory的方式,代码编译不会报错,但在运行时会抛出一个QuerySyntaxException异常:XXX is not mapped。
这个异常信息似乎告诉我们是因为User类没有映射到数据库的表中,然而我认真检查了所有配置信息,并没有发现配错的情况。于是我把Maven依赖的Hibernate5降级到Hibernate4目前最后一个版本4.3.11,QuerySyntaxException异常没有出现,User类也正常映射到了数据库表中。我一开始还以为是Hibernate5有bug,查看文档之后才发现原来是SessionFactory的创建方式改了。