文档章节

Spring3和hibernate4整合的一点小问题

十月阳光
 十月阳光
发布于 2014/01/18 23:56
字数 614
阅读 539
收藏 2

其实这个问题在第一次使用hibernate4的时候就发现了,当时没怎么管,因为后来换用了mybatis。

现在又重新一个项目,用hibernate4来做,就出现了这个问题,鼓捣了很久,保存数据一直提示我的User类不是一个Entity,还好上次无意间发现了解决办法,不然我又得放弃hibernate了。


废话不多说了,切入正题:


大家都知道,hibernate和spring整合的方式有两种,

一种是写hibernate.cfg.xml,然后在spring配置文件中配置sessionFactory的时候引入这个配置文件就可以了

第二种是直接将数据库的连接写在spring配置文件中,建一个dataSource的bean


我用的是第一种,然后通过如下代码引入的*.hbm.xml文件:

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
		<!-- hibernate配置文件 -->
		<property name="configLocations">
			<value>classpath:/com/singlesing/cfg/hibernate.cfg.xml</value>
		</property>
		<!-- mapping配置文件 -->
		
		<property name="mappingLocations">
			<list>
				<value>classpath:/com/singlesing/bean/mapping/*.hbm.xml</value>
			</list>
		</property>
		 
	</bean>



这种方式一次性直接添加了所有的hbm.xml文件,节约了很多行代码,当然这种方式也没有错,加载spring配置文件,也可以自动建表,一切看来似乎都正常。

可是在对这些实体类操作的时候,就会报Unknown entity这个错误。出错后,我把hbm.xml文件改写在hibernate.cfg.xml文件中,就没有这个问题了。


我考虑了一下,原因应该是当我要操作一个实体类的时候,我首先要获取session,获取session的代码如下:

package com.singlesing.util;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

@SuppressWarnings("deprecation")
public class HibernateUtil {
	
	private static SessionFactory sessionFactory;
	
	static{
		Configuration cfg = new Configuration().configure("com/singlesing/cfg/hibernate.cfg.xml");//注意这里
		sessionFactory = cfg.buildSessionFactory();
	}
	
	@SuppressWarnings("rawtypes")
	public static final ThreadLocal session = new ThreadLocal();
	
	@SuppressWarnings("unchecked")
	public static Session getCurrentSession()throws Exception{
		Session s = (Session)session.get();
		if (s == null) {
			s = sessionFactory.openSession();
			session.set(s);
		}
		return s;
	}
	
	public static void closeSession()throws Exception{
		Session s = (Session)session.get();
		if (s != null) {
			s.close();
		}
	}
}



可以看到我在代码中的注释,获取session的时候通过读配置文件获得sessionFactory再创建的,在hibernate.cfg.xml中根被没有配置*.hbm.xml,所以会找不到。


我想应该是这样,总之这样可以解决,但是要多些点代码了,不过也就写一次,不需要大的改动,也不太影响,不知道大家怎么解决这个问题,也没时间去查资料了,夜深了,得赶紧睡觉了。

© 著作权归作者所有

共有 人打赏支持
十月阳光
粉丝 30
博文 92
码字总数 51261
作品 0
成都
程序员
私信 提问
hibernate4与spring3的整合,不兼容

双休整合下 整合struts2+spring3.2.1+hibernate4.2.1 结果遇到问题如下问题: java.lang.NoSuchMethodError: org.hibernate.SessionFactory.openSession()Lorg/hibernate/classic/Session;at......

苏叶晚晚
2013/03/17
0
0
你好,想请教个问题 ( No Session found for current thread)

@汉唐 你好,想跟你请教个问题:你好 我正在 做一个小项目 用的是 spring3整合 hibernate4 出了的问题跟我看到你的一个讨论区里的问题是一样的 http://www.oschina.net/question/659202_866...

PlayCode
2013/11/28
188
0
spring3整合hibernate4出现的问题

Spring3与Hibernate4整合时出现了nested exception is java.lang.NoClassDefFoundError: Lorg/hibernate/cache/CacheProvider。 Hibernate3的时候,用spring来控制sessionfactory用的可以是o......

挨踢精英
2015/03/13
0
0
【用jersey构建REST服务】系列文章

1.用Jersey构建RESTful服务1--HelloWorldhttp://www.waylau.com/jersey-restful-helloworld/2.用Jersey构建RESTful服务2--JAVA对象转成XML输出http://www.waylau.com/jersey-restful-java-x......

waylau
2014/08/23
0
1
Struts2+Spring3+Hibernate——整合byMaven

在平时的JavaEE开发中,为了能够用最快的速度开发项目,一般都会选择使用Struts2,SpringMVC,Spring,Hibernate,MyBatis这些开源框架来开发项目,而这些框架一般不是单独使用的,经常是Str...

凡尘里的一根葱
2015/11/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

学习LinkedBlockingDeque源码

之前已经看了实现deque接口的ArrayDeque, ConcurrentLinkedDeque, LinkedList,也不能落下ConcurrentLinkedDeque,但是好像没在项目中用过。 这里看到实现的接口还有BlockingDeque<E>, Block...

woshixin
17分钟前
1
0
实战:用Python实现随机森林

摘要: 随机森林如何实现?为什么要用随机森林?看这篇足够了! 因为有Scikit-Learn这样的库,现在用Python实现任何机器学习算法都非常容易。实际上,我们现在不需要任何潜在的知识来了解模型...

阿里云官方博客
20分钟前
1
0
进程管理利器Supervisor--centos7下安装与卸载

目录 概述 环境准备 检查python环境 在线安装 配置Supervisor 启动并验证 概述 Supervisor的安装可以有在线安装和离线安装两种方式。安装方式取决于服务器是否联网,联网的话可采用在线安装,...

java_龙
26分钟前
4
0
spring系列汇总

spring spring-基于可扩展Schema的特性自定义标签 springmvc-同一个访问资源,多种视图解析方式 spring cache 配置使用aspectj模式织入 基于注解的spring缓存,轻松无侵入解决cache问题 spri...

细肉云吞
27分钟前
2
0
vsftpd搭建ftp

12月10日任务 14.4 exportfs命令 14.5 NFS客户端问题 15.1 FTP介绍 15.2/15.3 使用vsftpd搭建ftp exportfs命令 在nfs运行后的一段时间内,如果需要添加共享目录,这时需要修改exports文件,并...

robertt15
29分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部