【问题标题】:Unable to run database query when Session Object is not static?会话对象不是静态时无法运行数据库查询?
【发布时间】:2014-07-24 15:24:42
【问题描述】:

这是我的测试类:

public class test {


public static void main(String args[])
{
    database_connection db=new database_connection();
    java.util.List li=db.select("select name from sign_up where   u_id='ABCD79'");
    java.util.Iterator it=li.iterator();
    while(it.hasNext())
    {
        Object oo=it.next();
        System.out.println("The result is "+oo.toString());
    }
}

}

这是我的数据库连接文件:

public class database_connection
{
public static SessionFactory sessionfactory;
public  Session Listsession ;
public Query query;
public List list;

public static void open_connection()
{
try
{
database_connection   db=new database_connection();
sessionfactory=new Configuration().configure().buildSessionFactory();
db.Listsession = sessionfactory.openSession();
}
catch(Exception e)
{
 System.out.print("problem to open connection with database"+e);
 }
 }   

public  List select(String qry)
{ 
 try
    {

    open_connection();   
    Listsession.beginTransaction();
    query =Listsession.createQuery(qry);
    list=query.list();
    Listsession.getTransaction().commit();
    Listsession.close();
    }
    catch(Exception e)
    {

        Listsession.getTransaction().rollback();
        System.out.print("problem to select"+e);
    }
 return list;
 }
 }

在这种情况下,测试返回空指针异常,但是当我将这一行 public Session Listsession ; 替换为 public static Session Listsession ; 时,我从数据库中得到 name。我不知道为什么会这样,因为我希望每个用户都有一个不同的会话对象,我不能使会话对象静态。

【问题讨论】:

    标签: java hibernate session


    【解决方案1】:

    我认为问题出在这段代码

    try
    {
    database_connection   db=new database_connection();
    sessionfactory=new Configuration().configure().buildSessionFactory();
    db.Listsession = sessionfactory.openSession();
    }
    catch(Exception e)
    {
     System.out.print("problem to open connection with database"+e);
    }
    }   
    

    你正在做的是创建一个新对象 此处的 database_connection 类和您正在获取会话的该对象的 Listsession。所以对于创建database_connection对象的测试类,实际上是没有session实例的。

    尝试以下代码而不是上面的代码,它应该可以解决问题。

    try
    {
    sessionfactory=new Configuration().configure().buildSessionFactory();
    Listsession = sessionfactory.openSession();
    }
    catch(Exception e)
    {
     System.out.print("problem to open connection with database"+e);
    }
    }   
    

    【讨论】:

    • 如何直接访问非静态变量 Listsession。
    • 从 open_connection() 中删除静态。
    • 接受答案真的很有帮助。
    • 还有一个问题,我在方法开始和结束时打开和关闭连接是否可以,或者我应该在用户登录时打开会话。
    • 抱歉打开连接没有打开会话
    猜你喜欢
    • 2020-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-04
    • 2018-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多