前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Hibernate入门遇到的一些问题

Hibernate入门遇到的一些问题

作者头像
卡尔曼和玻尔兹曼谁曼
发布2019-01-25 14:55:07
7820
发布2019-01-25 14:55:07
举报
文章被收录于专栏:给永远比拿愉快

1. 配置文件位置

使用Configuration config = new Configuration().configure();读取Hibernate的配置文件,文件的默认名称为hibernate.cfg.xml,而且文件必须位于src根目录下。

那如果想自定义文件位置呢?

比如我放置的配置文件位置为src/configs/hibernate.cfg.xml。那么代码中这样写就行了,Configuration config = new Configuration().configure("configs/hibernate.cfg.xml");

还有就是在/hibernate.cfg.xml中,mapping结点有一个resource属性,这个属性包含的是Hibernate映射文件的路径,这个路径按照放置在src下面的路径写就好了。

比如说,我的一个映射文件Event.hbm.xml的路径为src/configs/domain/Event.hbm.xml,那么resource重应该为configs/domain/Event.hbm.xml。

2.错误:No appropriate connection provider encountered, assuming application will be supplying connections

Hibernate官方文档中建立SessionFactory有这样一个类:

代码语言:javascript
复制
public class HibernateUtil {

    private static final SessionFactory sessionFactory = buildSessionFactory();

    private static SessionFactory buildSessionFactory() {
        try {
            // Create the SessionFactory from hibernate.cfg.xml
            new Configuration().configure().buildSessionFactory(
			    new StandardServiceRegistryBuilder().build() );
        }
        catch (Throwable ex) {
            // Make sure you log the exception, as it might be swallowed
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }

}

注:这段代码本身有问题:buildSessionFactory方法没有写返回值,这是次要的。 但是,我安装这个类进行操作,结果就报错了:No appropriate connection provider encountered, assuming application will be supplying connections。

经过资料查询,发现有两种解决办法:

①不适用带参数的buildSessionFactory方法,直接使用不带参数的buildSessionFactory方法。可以运行程序确实不会报错了,但是不带参数的buildSessionFactory方法在API中已经被标注为过时。

②最终解决方法:

代码语言:javascript
复制
public class SessionFactoryUtil {
	 
    private static SessionFactory sessionFactory;
     
    private static SessionFactory buildSessionFactory() {
        try {
            Configuration configuration = new Configuration().configure("configs/hibernate.cfg.xml");
            ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
            SessionFactory sessionFactory = configuration
                                .buildSessionFactory(serviceRegistry);
            return sessionFactory;
        }
        catch (Throwable ex) {
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }
     
    public static SessionFactory getSessionFactory() {
        if(sessionFactory == null) sessionFactory = buildSessionFactory();
        return sessionFactory;
    }
}

最后说明一下,在4.1等有些版本中,没有StandardServiceRegistryBuilder类,而是使用如下语句进行ServiceRegistry类的创建的:

代码语言:javascript
复制
ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();

所以不同版本的Hibernate创建SessionFactory的时候请注意!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2014年12月25日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档