日期:2014-05-17  浏览次数:20698 次

一个Hibernate代码的错误
有个错误,请高手指导,
try{
1 Session session = HibernateUtil.openSession();
session.beginTransaction();

Group group = new Group("朋友");
Group group1 = new Group("商务");
Group group2 = new Group("家人");

ContactPerson cp = new ContactPerson("比尔盖茨");
cp.setGroup(group);
session.save(cp);

ContactPerson cp1 = new ContactPerson("巴菲特");
cp.setGroup(group1);
session.save(cp1);

ContactPerson cp2 = new ContactPerson("路人甲");
cp.setGroup(group2);
session.save(cp2);

session.getTransaction().commit();
}catch(Exception e){
e.printStackTrace();
}finally{
2 session.close();
}

标 1 的这一行如果放在try外面就真确;但如果放在try里面(想现在这样),标 2 的这一行就会提示有错误,前面有红色错误提示。
注:HibernateUtil是我写的一个工具类,用来获得session对象的,
请高手看看这是怎么回事呢,十分感谢!!
请解释详细原因,

------解决方案--------------------
这个问题就是变量作用域的问题:
try和finally相当于是两个区域,所以session声明时要对这两个区域是全局的。。

你也可以如下写法:
Session session = null;
try{
session = HibernateUtil.openSession();
}catch(Exception e){

} finally{
session.close();
}
------解决方案--------------------
就是说你放在里面的时候是一个局部变量 在finally他又不知道session是一个什么东西 你要是放在外面了 他就是这个方法的全局变量了 finally是在这个方法里面 finally就知道session是一个变量了 报的错应该是session is not define吧(session没定义).
------解决方案--------------------
定义在try中,只对try内的代码块有效,catch中找不到,应该定义在外面
------解决方案--------------------

Java code

// 声明session
Session session = null;
try{
  // session 赋值
  session = HibernateUtil.openSession();
}catch(Exception e){
} finally{
// 关闭session
  session.close();
}