sessionfactory
其实网络上已经存在很多关于Hibernate初始化的文章了。但是,随着Hibernate版本不断升级,有些初始化的方式已经悄悄的变成了坑。
今天就遇到了下面的坑(基于Hibernate 5.2.10):
configuration cfg = new Configuration().configure("hibernate/hibernate.cfg.xml");
ServiceRegistry sr= new StandardServiceRegistrybuilder().APPlysettings(cfg.getProperties()).build();
sessionfactory sf = cfg.buildSessionFactory(sr);
通过这种方式,在Session保存对象时会发生类似下面这种错误:
org.hibernate.MappingException: Unknown entity: test.hibernate.StudentModel
首先声明,我的配置是没问题的,在hibernate.cfg.xml也引入了StudentModel的Mapping文件。
遇到这个问题后,我首先想到的是要找到错误发生的根源。
然后我就开始分析Hibernate源码,但是,根据问题发生的地方往上追溯了半天也没找到根本原因。于是就想看看网上有没有发生过类似问题的。
在网络上搜索,关键词很重要。
如果直接搜索: 【org.hibernate.MappingException: Unknown entity:】的话,出现的解决办法都是告诉你要正确配置文件或正确引入类。很显然这解决不了我的问题。
如果搜索:【Hibernate 5 mapping找不到】的话,正确的解决办法就出现了。其实就是按照Hibernate官网介绍的方式进行初始化。
下面整理了Hibernate官网介绍的针对各个版本的初始化方式,不过没有找到类似上面提到的那个坑的方式,不知道谁发明的。
注:其实在Hibernate 5.xxx里使用以前的初始化方式还是可以的,这说明Hibernate做了很好的向后兼容。
Hibernate 4.2/4.3
参考:http://docs.jboss.org/hibernate/orm/4.3/quickstart/en-US/html_single/
protected void setUp() throws Exception {
// A SessionFactory is set up once for an application
sessionFactory = new Configuration()
.configure() // configures settings from hibernate.cfg.xml
.buildSessionFactory();
}
Hibernate 5.0/5.1/5.2
参考:http://docs.jboss.org/hibernate/orm/5.2/quickstart/html_single/
protected void setUp() throws Exception {
// A SessionFactory is set up once for an application!
final StandardServiceRegistry registry = new StandardServiceRegistryBuilder()
.configure() // configures settings from hibernate.cfg.xml
.build();
try {
sessionFactory = new Metadatasources( registry ).buildMetadata().buildSessionFactory();
}
catch (Exception e) {
// The registry would be destroyed by the SessionFactory, but we had trouble building the SessionFactory
// so destroy it manually.
StandardServiceRegistryBuilder.destroy( registry );
}
}
相关阅读
Hibernate是一个开放源代码的对象关系映射(ORM)框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程
最近在写一个博客项目,数据库表的建立要考虑多表的问题,记录下学习所得! CRUD create read update delete 实体类的设计: Article: art
1. 什么是hqlHQL是Hibernate Query Language的缩写2. hql和sql区别/异同 HQL SQL 类名/属性 表名/列名 区分大小写,关键
Hibernate Criteria多表查询Hibernate有多种查询方式,如果想要多表查询,有3种方法1.HQL查询(写连接语句)2.Native SQL(手写原生SQL语句
通俗解释Hibernate中SessionFactory和Session是否是线
******************************************************************* SessionFactory接口负责Hibernate的初始化和建立Sessio