新手问个Spring的简单问题 在Spring-struts-hibernate整合开发时,在DAO类中,为什么Session(hibernate)作为成员变量,就算后面不用,也一定报错(我在每个方法中重新写局部变量Session,我只是做个试验,想知道原理),可是,如果是是普通类,就算在DAO类中作为成员变量,只要是只定义,后面不用,不初始化也不报错,请问为什么? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可是,如果是是普通类,就算在DAO类中作为成员变量这句话是什么意思?你所谓的普通类跟DAO类有什么区别? 我说的普通类,是跟hibernate的Session类相比,是代替Session类放在DAO中 不清楚要表达什么意思。。session不是由spring来管理吗? 你试下,在DAO类中,配置一个普通类作为成员变量,不在SPRING中初始化,不报错,可是,如果随便写个Session代替普通类,不在SPRING中初始化,就会报错 是呀,因为你session在没有初始化时候用到了,所以就会出错。但是你的dao里面普通类在service里面用一下试试不妨楼主写一个连接数据库的类试试 DAO中的Session配了不初始化,但是在具体方法中,我没有用到这个Session,我在每个方法中重新定义局部变量Session,结果也报错 不明白楼主的意思。。 整合hibernate后会有一个HibernateDaoSupport类 自定义的dao只要继承该类就可以了 楼主给的信息不全,应该把报的错贴出来我猜是因为你把session定义在dao类中,然后spring按bean名自动装配了session,结果类型不对报错的lz没给出错信息,上面的只是我的猜想 在DAO类中:public class bas_dictDao implements Bas_dictIDao { SessionFactory sf; Transaction tx=null; Session sess=null;//!!!!!!作为全局变量 //使用时: public boolean add(Object item) { Bas_dictForm bdf=(Bas_dictForm)item; BasDict bd=new BasDict(); bd.setDictIsEditable(bdf.getDict_is_editable()); bd.setDictItem(bdf.getDict_item()); bd.setDictType(bdf.getDict_type()); bd.setDictValue(bdf.getDict_value()); boolean i=false; try { sess=sf.openSession();//写上这句久好了 tx=sess.beginTransaction(); sess.save(bd); tx.commit(); i=true; } catch(Exception ex) { if(null!=tx) { tx.rollback(); } System.out.print("add()方法出错"+ex.getMessage()); i=false; } return i; } 我的设置成全局变量没有报错,,但是我初始化 SESSION 是用的session = HibernateSessionFactory.getSession()你试试看 spring和hibernate整合的话要看你是不是用spring控制事物,如果是那就应该用spring封装的sessiontemplate 而不要用session 起点中文网中左右两边的广告怎么实现的(广告无停留) 哪位高人知道怎样通过java将常见的视频格式转为3gp 关于vsmartUpLoad组件的使用 请教struts国际化问题 Struts 2权威指南 第一个例子问题 求助JBuilder9配置SQL2000数据库问题 请问谁有连接sqlserver jdbc 程序驱动? 请问jsp如何读取客户端文件信息 诚邀各位天牛请进 联通sgip华为包,能发短信但是上行的短信状态和接受短信无法收到? JAVA sql update 语句问题 绑定域名之后,session保存不了了??
但是你的dao里面普通类在service里面用一下试试
不妨楼主写一个连接数据库的类试试
整合hibernate后会有一个HibernateDaoSupport类
自定义的dao只要继承该类就可以了
我猜是因为你把session定义在dao类中,然后spring按bean名自动装配了session,结果类型不对报错的lz没给出错信息,上面的只是我的猜想
Transaction tx=null;
Session sess=null;//!!!!!!作为全局变量 //使用时:
public boolean add(Object item) {
Bas_dictForm bdf=(Bas_dictForm)item;
BasDict bd=new BasDict();
bd.setDictIsEditable(bdf.getDict_is_editable());
bd.setDictItem(bdf.getDict_item());
bd.setDictType(bdf.getDict_type());
bd.setDictValue(bdf.getDict_value());
boolean i=false;
try
{
sess=sf.openSession();//写上这句久好了
tx=sess.beginTransaction();
sess.save(bd);
tx.commit();
i=true;
}
catch(Exception ex)
{
if(null!=tx)
{
tx.rollback();
}
System.out.print("add()方法出错"+ex.getMessage());
i=false;
}
return i;
}
但是我初始化 SESSION 是用的
session = HibernateSessionFactory.getSession()
你试试看