no session or session was closed处理方法
放弃使用表间的级联关系(一对多,多对多,多对一...) 采用hibernate的关联查询HQL内连接直接得到所需结果即可
例://根据票的ID得到票
1.用级联关系写 如果关闭session则出现no session or session was closed
public Vote findVoteByVid(int vid) {
Session session=HibernateSessionFactory.getSession();
Vote v=null;
tx=session.beginTransaction();
v=(Vote)session.get(Vote.class, vid);
//session.close();
return v;
}
2.用HQL内连接直接得到结果则不会出现异常
//根据票的ID得到票 用内连接实现
@SuppressWarnings("unchecked")
public List<Vote> getVoteById(int vid) {
Session session=HibernateSessionFactory.getSession();
List<Vote> lis=null;
try {
tx=session.beginTransaction();
String hql="select vt,u.context from Vote vt inner join vt.votecontexts u where vt.voteId=?";
Query query=session.createQuery(hql);
query.setInteger(0, vid);
lis=query.list();
tx.commit();
} catch (Exception e) {
if(null!=tx)tx.rollback();
e.printStackTrace();
}finally{
session.close();
}
return lis;
}