关于Hibernate 5 和 Hibernate 4 在创建SessionFactory的不同点分析(解决 org.hibernate.MappingException: Unknown entity: xx类报错问题)

关于Hibernate 5 和 Hibernate 4 在创建SessionFactory的不同点分析(解决 org.hibernate.MappingException: Unknown entity: xx类报错问题)_第1张图片

最近在一边看视频学习这个框架,一遍对着视频开始敲代码,达到学以致用的地步,可就是这么一个问题,使我纠结了一小时。

俗话说的好,眼过千遍,不如手过一遍,以后遇到问题都会随手解决并记录在案的,为了自己以后不再犯错。

Configuration详解:

//默认读取src下hibernate.properties文件  不推荐使用这种方法
//Configuration cfg = new Configuration();
//新建Configuration对象   这个方法默认读取hibernate.cfg.xml
Configuration cfg = new Configuration().configure();
//补充:
//Configuration cfg1 = new Configuration().configure("可以自己指定文件名");

通过Configuration对象创建SessionFactory对象

hibernate4中的写法,主要还是configure对象中用工厂模式来构建,很传统的模式。这样的写法在hibernate5中使用的话会出现标题的错误

//服务注册,这是使用创建者模式,根据配置文件中的配置字段来构建注册服务
ServiceRegistry registry = new StandardServiceRegistryBuilder()
                            .applySettings(cfg.getProperties())
                            .build();

//使用实例化好了的注册服务,使用Configuration中的工厂模式实例化了
SessionFactory sf = cfg.buildSessionFactory(registry);

hibernate5中的写法, 全部修改为创建者模式,3条语句,3个创建。

//直接使用创建者模式构建出了标准服务注册对象
StandardServiceRegistry standardRegistry = new StandardServiceRegistryBuilder()
.configure().build();

//这个对象metadata对象应该扮演了一个万金油的角色,使用以上的注册对象作为入参构建这个对象
Metadata metadata = new MetadataSources(standardRegistry).getMetadataBuilder()
.applyImplicitNamingStrategy(
ImplicitNamingStrategyComponentPathImpl.INSTANCE).build();

//由metadata构建出SessionFactory
SessionFactory sf  = metadata.getSessionFactoryBuilder().build();

因为在学习不同框架时不同版本中会有不同的实现方式,所以以后在学习中还是要特别关注版本之间的差异性,不要只是按着教程走,要真正的做到融会贯通才行,愿你我永无BUG!

相关阅读:关于Hibernate 5 和 Hibernate 4 在创建SessionFactory的不同点分析(解决 org.hibernate.MappingException: Unknown entity: xx类报错问题)

你可能感兴趣的:(关于Hibernate 5 和 Hibernate 4 在创建SessionFactory的不同点分析(解决 org.hibernate.MappingException: Unknown entity: xx类报错问题))