有个错误,请高手指导,
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对象的,
请高手看看这是怎么回事呢,十分感谢!!
请解释详细原因,

解决方案 »

  1.   

       什么问题?? 就 标1 不能放在try里面吗??  作用域的问题? 你把 Session session定义全局变量就好了。  
      

  2.   

    这个问题就是变量作用域的问题:
      try和finally相当于是两个区域,所以session声明时要对这两个区域是全局的。。你也可以如下写法:
    Session session = null;
    try{
       session = HibernateUtil.openSession();
    }catch(Exception e){} finally{
      session.close();
    }
      

  3.   

    就是说你放在里面的时候是一个局部变量 在finally他又不知道session是一个什么东西  你要是放在外面了 他就是这个方法的全局变量了 finally是在这个方法里面 finally就知道session是一个变量了 报的错应该是session is not define吧(session没定义).  
      

  4.   

    定义在try中,只对try内的代码块有效,catch中找不到,应该定义在外面
      

  5.   

    “标 1 的这一行如果放在try外面就真确;但如果放在try里面(想现在这样),标 2 的这一行就会提示有错误,前面有红色错误提示”
    你这是变量使用范围问题
      

  6.   

    // 声明session
    Session session = null;
    try{
      // session 赋值
      session = HibernateUtil.openSession();
    }catch(Exception e){
    } finally{
    // 关闭session
      session.close();
    }这样把session在try声明,在try里面赋值就可以解决你的问题了.
      

  7.   

    1处相当于把session定义为局部变量了,只能在try{}里使用,在finally{}里肯定提示找不到对象了