无法从 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 【问题描述】:尝试使用 Hibernate 和 Struts2 显示 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() 进行静态引用 - 无法在片段中播放音频