学习hibernate5遇到的一些坑

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的超集,详细的内容就不在这篇博文里总结了)

Last modification:November 3rd, 2019 at 10:55 am

Leave a Comment