您的位置:首页 > 编程语言 > Java开发

Spring3和hibernate4整合的一点小问题

2014-01-18 00:00 288 查看
摘要: 用hibernate4保存save(Object record)时提示Unknown entity

其实这个问题在第一次使用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,所以会找不到。

我想应该是这样,总之这样可以解决,但是要多些点代码了,不过也就写一次,不需要大的改动,也不太影响,不知道大家怎么解决这个问题,也没时间去查资料了,夜深了,得赶紧睡觉了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息