Hibernate必须等待几秒才能得到我刚刚创建的对象

时间:2016-09-17 23:22:03

标签: java hibernate session

使用此会话处理程序:

public class SessionHandler {
    private static SessionFactory DBContext;
    static {
        try {
            DBContext = HibnerateConfiguration.config().buildSessionFactory();
        }
        catch(Throwable t) {
            throw new ExceptionInInitializerError(t);
        }
    }

    /*
     * Returns a session anyway. If currently no session exist, open a new one;
     * If there is a current session, use the existing one.
     */
    @Override
    public Session getSession() {
        try {
            return DBContext.getCurrentSession();
        }
        catch (HibernateException he) {
            logger.error("session already exist.");
            return DBContext.getCurrentSession();
        }
    }

    public void close() {
        DBContext.close();
    }
}

以及以下创建和获取方法:

public Serializable create(T type_entity) {
    Session session = getSessionHandler().getSession();
    Transaction tx = null;
    try {
        tx = session.beginTransaction();
        Serializable result = session.save(type_entity);
        tx.commit();
        return result;
    } catch (HibernateException ex) {
        ex.printStackTrace(); 
        if (tx!=null) tx.rollback();
        throw ex;
    } finally {
        getSessionHandler().close();
    }
}

@SuppressWarnings("unchecked")
public T get(Serializable id) throws InvalidRequestException {
    Session session = getSessionHandler().getSession();
    Transaction tx = session.beginTransaction();
    tx.commit();
    try {
        Object obj = session.get(_classtype, id);
        if (obj == null) {
            throw new InvalidRequestException(String.format("requested object with id %s does not exist.", id));
        } else {
            return (T)obj;
        }
    } catch(HibernateException ex) {
        ex.printStackTrace(); 
        if (tx!=null) tx.rollback();
        throw ex;
    } finally {
        getSessionHandler().close(); 
    }
}

当我创建一个返回id = 4的对象时,如果我立即在浏览器上发出最终要求id为4的新对象的请求,我必须等待几秒钟(我上次尝试的是&gt ; 3秒)。

当从create返回id时,数据应该已经存在。但是get返回null。我非常怀疑get是使用旧缓存,然后每隔几秒更新一次,但我不知道如何解决它。

如果需要任何信息,请告诉我,我很乐意提供这些信息。

0 个答案:

没有答案