初次配置使用Hibernate,不过还是忍不住吐槽,这Hibernate的版本变化实在太坑了,花了我一天才解决。
问题1:各个版本Hibernate基本包的不同,在这里就不详细写明了,因为网上都可以找到相关版本的基本包。
问题2:不同版本用Hibernate创建Session的方式有不同,这里就列出Hibernate4和Hibernate5两个版本的。
Hibernate4.x版本创建Session的代码:
- Configuration configiguration = new Configuration().configure();
- ServiceRegistryBuilder builder = new ServiceRegistryBuilder().applySettings(configiguration.getProperties());
- ServiceRegistry registry = builder.buildServiceRegistry();
- factory = configiguration.buildSessionFactory(registry);
- session = factory.openSession();
- transaction = session.beginTransaction();
Hibernate5.x版本创建Session的代码:
Configuration configuration = new Configuration().configure();
configuration.addClass(Login.class);
//创建服务注册对象
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
//创建会话工厂对象
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
//会话对象
session = sessionFactory.openSession();
//开启事物
transaction = session.beginTransaction();
注意1:
Hibernate5.x与之前版本不同的:
1)
configuration.addClass(News.class);//News为实体类名
2)
ServiceRegistry的实现需用StandardServiceRegistryBuilder
之前版本用的是 ServiceRegistryBuilder
注意2:
Exception in thread "main" org.hibernate.MappingException: Unknown entity: wen.Login
由于临时想到就提醒一下,发生找不到实体对象时错误时,除了网上所说的两个配置文件的问题以导错包的错误,还有一种便是Hibernate5.x版本中的创建Session代码处少了configuration.addClass(Login.class);这行代码。Login为实体类名。