1. SessionFactory创建的修改
错误提示:org.hibernate.MappingException: Unknown entity: xx类
这是因为hibernate4升级到hibernate5后SessionFactory创建方式变了。
hibernate4
Configuration configuration = new Configuration().configure();
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties())
.build();
SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);
hibernate5
StandardServiceRegistry standardRegistry = new StandardServiceRegistryBuilder().configure().build();
Metadata metadata = new MetadataSources(standardRegistry).getMetadataBuilder()
.applyImplicitNamingStrategy(ImplicitNamingStrategyComponentPathImpl.INSTANCE).build();
SessionFactory sessionFactory = metadata.getSessionFactoryBuilder().build();
2.hibernate5连接数据库出错
错误提示:MySQL server version for the right syntax to use near 'type=InnoDB' at line x
这个主要是hibernate方言设置出问题了修改hibernate.cfg.xml中的dialect,如下
<property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
3.主键自动增长
- 修改映射文件中主键的配置,如下
<generator class="native" />
- 或者采用注解的方式
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) public int getId(){ return id; }
(注:关于主键生成策略,上面的native是hibernate自己的策略,第二种方法的Identity策略是JPA策略。Hibernate是JPA的一个实现,但是其功能是JPA的超集,详细的内容就不在这篇博文里总结了)