hibernate+struts框架问题 高手进

johntmac 2010-06-01 03:34:31
我用这两个框架 从数据库查询信息 能成功 但是当我删除一条记录时 却跳出
org.hibernate.SessionException: Session is closed! 这是怎么回事 高手请教 谢谢
...全文
151 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
study_liuy 2010-06-01
  • 打赏
  • 举报
回复
把错误贴出来啊
johntmac 2010-06-01
  • 打赏
  • 举报
回复
没人能帮我吗?呼叫高手
johntmac 2010-06-01
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 huaye2007 的回复:]
实在无法解决的话,把你这个语句去掉session.close()
[/Quote]
没用的 我试过了
johntmac 2010-06-01
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 bjliuzg 的回复:]
public void delete(Class cs, Serializable id) {
// TODO Auto-generated method stub
Transaction tx=null;
Session session=HibernateSessionFactory.getSession();
try {
tx=session.beginTransaction();
……
[/Quote]
你session。close根本无法运行啊 一运行就报错, 一定要HibernateSessionFactory.closeSession();的啊 再说我查询关闭后 就如删除 有Session session=HibernateSessionFactory.getSession(); 然后开启事务的啊
huaye 2010-06-01
  • 打赏
  • 举报
回复
实在无法解决的话,把你这个语句去掉session.close()
johntmac 2010-06-01
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 lxs512297816 的回复:]
也就是一的那方表删除了,但是对应的多的那方表没删除,看看的你的<one-to-many> 问题就在那。。。。
[/Quote]
<hibernate-mapping>
<class name="entity.Qx" table="QX" schema="dbo" catalog="Six">
<id name="qxid" type="java.lang.Integer">
<column name="qxid" />
<generator class="native" />
</id>
<property name="qxname" type="java.lang.String">
<column name="qxname" length="50" not-null="true" />
</property>
<set name="jds" inverse="true">
<key>
<column name="qxid" not-null="true" />
</key>
<one-to-many class="entity.Jd" />
</set>
</class>
</hibernate-mapping>
------------------------------上面那个是区县(一) 下面那个是街道(多),我删除的是街道(多)啊
<hibernate-mapping>
<class name="entity.Jd" table="JD" schema="dbo" catalog="Six">
<id name="jdid" type="java.lang.Integer">
<column name="jdid" />
<generator class="native" />
</id>
<many-to-one name="qx" class="entity.Qx" fetch="select" lazy="false" >
<column name="qxid" not-null="true" />
</many-to-one>
<property name="jdname" type="java.lang.String">
<column name="jdname" length="50" not-null="true" />
</property>
</class>
</hibernate-mapping>
johntmac 2010-06-01
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 zhouenya 的回复:]
加到many-to-one 和one-to-many的set中


引用 6 楼 johntmac 的回复:
引用 4 楼 zhouenya 的回复:
实体类的映射文件存在many-to-one or one-to-many的关系?
如果存在,加上:fetch="join"
如果不是这个问题,应该是你取得返回值之前就关闭了session

嗯 存在关系 请问 fetch=“joi……
[/Quote]

加了 还是没用 对了 刚才one to many一方中的 fetch是=”select“ 不过我照你的都加了 join 还是报同样的错
lxs512297816 2010-06-01
  • 打赏
  • 举报
回复
也就是一的那方表删除了,但是对应的多的那方表没删除,看看的你的<one-to-many> 问题就在那。。。。
bjliuzg 2010-06-01
  • 打赏
  • 举报
回复
public void delete(Class cs, Serializable id) {
// TODO Auto-generated method stub
Transaction tx=null;
Session session=HibernateSessionFactory.getSession();
try {
tx=session.beginTransaction();
session.delete(this.get(cs, id));
tx.commit();
} catch (HibernateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
HibernateSessionFactory.closeSession();
}
}
上面的代码中 finally 中不要用 HibernateSessionFactory.closeSession();
这样的话是把所有的session都关闭了 ,你应该只关闭你上面创建的session就可以了,session.close();
zhouenya 2010-06-01
  • 打赏
  • 举报
回复
加到many-to-one 和one-to-many的set中

[Quote=引用 6 楼 johntmac 的回复:]
引用 4 楼 zhouenya 的回复:
实体类的映射文件存在many-to-one or one-to-many的关系?
如果存在,加上:fetch="join"
如果不是这个问题,应该是你取得返回值之前就关闭了session

嗯 存在关系 请问 fetch=“join" 加到哪一方?one?many?
[/Quote]
johntmac 2010-06-01
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 pixiaozheng 的回复:]
跟你贴出来的代码没有关系。。

报异常的原因,你在做删除操作前,某些动作把session关闭了。。
[/Quote]
嗯 我也知道是关了 就是不知道做了什么关了 我之前就是一个简单的查询 然后成功 然后删除就这样了 望指教 谢谢
johntmac 2010-06-01
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zhouenya 的回复:]
实体类的映射文件存在many-to-one or one-to-many的关系?
如果存在,加上:fetch="join"
如果不是这个问题,应该是你取得返回值之前就关闭了session
[/Quote]
嗯 存在关系 请问 fetch=“join" 加到哪一方?one?many?
pixiaozheng 2010-06-01
  • 打赏
  • 举报
回复
跟你贴出来的代码没有关系。。

报异常的原因,你在做删除操作前,某些动作把session关闭了。。

zhouenya 2010-06-01
  • 打赏
  • 举报
回复
实体类的映射文件存在many-to-one or one-to-many的关系?
如果存在,加上:fetch="join"
如果不是这个问题,应该是你取得返回值之前就关闭了session
johntmac 2010-06-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 tcmis 的回复:]
代码贴出来看看,,好像数据库会话是关闭的,没有打开。
[/Quote]
public void delete(Class cs, Serializable id) {
// TODO Auto-generated method stub
Transaction tx=null;
Session session=HibernateSessionFactory.getSession();
try {
tx=session.beginTransaction();
session.delete(this.get(cs, id));
tx.commit();
} catch (HibernateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
HibernateSessionFactory.closeSession();
}
}
-----------------------这是通用 dao类中的一个 删除方法

public class cityImpl {
private BaseHibernateDao bhd=new BaseHibernateDao();

public void del(int jdid){
bhd.delete(Jd.class, jdid);
}
}
----------------------------在biz中代码

public ActionForward del(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
CityForm cityForm = (CityForm) form;
biz.del(cityForm.getJd().getJdid());
return mapping.findForward("del");
}
------------------------------------在action中的代码
xinlan1022 2010-06-01
  • 打赏
  • 举报
回复
代码。。。。。。。。。
tcmis 2010-06-01
  • 打赏
  • 举报
回复
代码贴出来看看,,好像数据库会话是关闭的,没有打开。

67,542

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧