Hibernate SessionFactory类不会更改数据库中的数据

时间:2013-10-09 16:05:52

标签: java mysql hibernate java-ee

在我们的应用程序中,我们有一个HibernateSessionFactory类,即打开和关闭连接。一切都很好,但是当我们更新数据库中的数据时,它在我们的应用程序中不会改变。不幸的是,我们从数据库中看到旧数据。我该如何解决这个问题?

public class HibernateSessionFactory {

    private static final ThreadLocal threadLocal = new ThreadLocal();
    private static org.hibernate.SessionFactory sessionFactory;

    private static Configuration configuration = new Configuration();
    private static ServiceRegistry serviceRegistry;

    private static final Logger log = Logger.getLogger(
                                        HibernateSessionFactory.class);

    static {
        try {
            configuration.configure();
            serviceRegistry = new ServiceRegistryBuilder()
                        .applySettings(configuration.getProperties())
                        .buildServiceRegistry();
            sessionFactory = configuration.buildSessionFactory(serviceRegistry);
        } catch (Exception e) {
            log.error("Error Creating SessionFactory", e);
        }
    }

    private HibernateSessionFactory() {}

    public static Session getSession() throws HibernateException {
        Session session = (Session) threadLocal.get();
        if (session == null || !session.isOpen()) {
            if (sessionFactory == null) {
                rebuildSessionFactory();
            }
            session = (sessionFactory != null) ?
                        sessionFactory.openSession() : null;

            threadLocal.set(session);
        }
        return session;
    }

    public static void rebuildSessionFactory() {

        try {
            configuration.configure();
            serviceRegistry = new ServiceRegistryBuilder()
                        .applySettings(configuration.getProperties())
                        .buildServiceRegistry();
            sessionFactory = configuration.buildSessionFactory(serviceRegistry);
        } catch (Exception e) {
            log.error("Error Creating SessionFactory", e);
        }
    }

    public static void closeSession() throws HibernateException {
        Session session = (Session) threadLocal.get();
        threadLocal.set(null);
        if (session != null) {
            session.flush();
            session.close();

        }
    }

    public static org.hibernate.SessionFactory getSessionFactory() {
        return sessionFactory;
    }

    public static Configuration getConfiguration() {
        return configuration;
    }

}

@SuppressWarnings("unchecked")
public List<Tauthor> getAuthors() throws HibernateException {
    log.debug("getting all authors");
    Query queryObject = null;
    List<Tauthor> authors = null;
    Session session = HibernateSessionFactory.getSession();
    try {
        String queryString = "from Tauthor";
        queryObject = session.createQuery(queryString);
        authors = queryObject.list();
    } catch (HibernateException e) {
        log.error("get all authors failed", e);
        throw e;
    } finally {
        HibernateSessionFactory.closeSession();
    }
    return authors;
}

0 个答案:

没有答案