Hibernate配置常见问题汇总

1、Unkown Entity的非常规现象

找不到实体类,我们会先检查映射文件和cfg.xml是否配置成功,检查后发现都没有问题,经过反复测试:

发现一个问题,我在同一个项目下建立了com.stephen.domain包,里面有User实体类,在另外一个包的java文件引用时,如果没有显式导入domain包,myeclipse会自动生成com.stephen.spring_hebernate.User ,竟然是项目下的User对象,然后测试session时就悲剧了,找不到实体;显式导入User所在包,问题就不存在。

2、java.lang.UnsupportedOperationException: The user must supply a JDBC connection (Spring整合Hibernate+c3p0连接池)

这个异常有多种原因导致,大致理解为没有配置好jdbc连接,做测试代码时:

public class TestHibernate {

	@Test
	public void test() throws Exception {
		SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
		
		Session session = sessionFactory.openSession();
		session.beginTransaction();
		session.save(new User("testHibernate")); // 保存
		session.getTransaction().commit();
		session.close();
	}
}

发现获取SessionFactory为null ,并且报出以上异常,结合查看配置文件和测试代码发现,测试代码有误,Spring整合Hibernate时,把配置信息全部写到applicationContext.xml中,但是测试代码用new Configuration().configure().buildSessionFactory(),是去读取cfg.xml来创建sessionFactory;。所以无法获取SessionFactory。谨以此博客提醒自己,加深对配置和代码的理解。

解决办法:
1、在Hibernate.cfg.xml中加入c3p0连接池配置,由于此方法配置c3p0的属性较少,建议使用方法2;

2、在applicationContext.xml中的sessionFactory Bean中引入<property name="dataSource" ref="dataSource"></property> c3p0的Bean引用,使用时必须通过ApplicationContext的getBean()方法,才能创建sessionFactory实例;




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值