无法从 HibernateUtil 类型对非静态方法 getSessionFactory() 进行静态引用

Posted

技术标签:

【中文标题】无法从 HibernateUtil 类型对非静态方法 getSessionFactory() 进行静态引用【英文标题】:Cannot make a static reference to the non-static method getSessionFactory() from the type HibernateUtil 【发布时间】:2015-08-18 13:39:53 【问题描述】:

尝试使用 HibernateStruts2 显示 MySQL 数据库中的数据,我可以将数据添加到数据库中并且值正在获取已更新,但我无法在 jsp 页面中显示它。

错误:无法从 HibernateUtil 类型中对非静态方法 getSessionFactory() 进行静态引用

这是我的页面..

HibernateUtils.java

package com.stg.shdb2.utils;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;


public class HibernateUtils    

    private static final SessionFactory sessionFactory=buildSessionFactory();

    private static  SessionFactory buildSessionFactory() 
        try 
            // Create the SessionFactory from hibernate.cfg.xml
            return new AnnotationConfiguration().configure().buildSessionFactory();
         catch (Throwable ex) 
            // Make sure you log the exception, as it might be swallowed
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        
    

    public static  SessionFactory getSessionFactory() 
        return sessionFactory;
    

DataConnect.java

package com.stg.shdb2.dao;

import java.util.List;

import net.sf.gilead.core.hibernate.HibernateUtil;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.apache.cxf.service.invoker.SessionFactory;

import com.stg.shdb2.beans.User;
import com.stg.shdb2.utils.HibernateUtils;

public class DataConnect 
    Session sess;

    public void insertDetails(User user)
        try
            sess = (Session) HibernateUtils.getSessionFactory();
            Transaction tx = sess.beginTransaction();
            sess.save(user);

            System.out.println("Data Inserted in user_details");

            tx.commit();
            sess.close();
        
        catch(Exception exep)
            exep.printStackTrace();
        
    


    @SuppressWarnings("unchecked")
    public List<User> list()       
                 Session session = HibernateUtil.getSessionFactory().getCurrentSession();
                 session.beginTransaction();
                 List<User> user = null;
                 try 

                     user = (List<User>) session.createQuery("from user_data").list();

                  catch (HibernateException e) 
                 e.printStackTrace();
                 session.getTransaction().rollback();
            
        session.getTransaction().commit();
        return user;
    


【问题讨论】:

【参考方案1】:

你需要改变这个:

Session session = HibernateUtil.getSessionFactory().getCurrentSession();

到这里:

Session session = HibernateUtils.getSessionFactory().getCurrentSession();

该类名为HibernateUtils,而不是HibernateUtil

【讨论】:

以上是关于无法从 HibernateUtil 类型对非静态方法 getSessionFactory() 进行静态引用的主要内容,如果未能解决你的问题,请参考以下文章

如何在调用 servlet 之前静态初始化 HibernateUtil?

无法对非静态方法 getAssets() 进行静态引用 - 无法在片段中播放音频

封装HibernateUtil(静态单例模式)和增删改查方法

泛型类中的静态方法?

如何在ios framework中引用其他静态库

视频播放完毕后启动 Activity