Hibernate 3.2.5 can和xB4;t禁用休眠缓存
我在尝试禁用hibernate缓存时遇到很多问题。我将Hibernate3.2.5与ZK框架和DB2数据库一起使用。Java Web版本是6。 我所做的只是: 1-禁用二级缓存Hibernate 3.2.5 can和xB4;t禁用休眠缓存,hibernate,caching,java-6,Hibernate,Caching,Java 6,我在尝试禁用hibernate缓存时遇到很多问题。我将Hibernate3.2.5与ZK框架和DB2数据库一起使用。Java Web版本是6。 我所做的只是: 1-禁用二级缓存 <property name="hibernate.cache.use_second_level_cache">false</property> <property name="hibernate.cache.use_query_cache">false</prope
<property name="hibernate.cache.use_second_level_cache">false</property>
<property name="hibernate.cache.use_query_cache">false</property>
<!-- Disable the second-level cache -->
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<property name="cache.region_factory">org.hibernate.cache.impl.NoCachingRegionFactory</property>
4-在重新启动会话时,会发生这种情况
public static void reOpenSession() {
clearSession();
// flushSession();
clearSession();
closeSession();
getSession();
clearSession();
}
5-当我获取列表时,我使用setCacheMode(CacheMode.REFRESH),如中所示
尽管如此,有时在表中进行一些更新之后,我会读取旧的数据值,即使它们在数据库中是正确的。我是否缺少禁用完整缓存的内容?有一些结果,我不能向用户显示错误的数据,因为它们会弄乱应用程序
编辑:
也许我的刀有什么问题
公共类DAO{
private static final ThreadLocal session = new ThreadLocal();
public DAO(Class classe) {
}
public static Session getSession() {
Session session = (Session) DAO.session.get();
if (session == null) {
session = HibernateUtil.getInstance().getSessionFactory().openSession();
//session.getSessionFactory().evict(EduProduto.class);
session.setCacheMode(CacheMode.REFRESH);
session.setFlushMode(FlushMode.ALWAYS);
DAO.session.set(session);
//Messagebox.show("CAIU AQUI");
//System.out.println("CAIU AQUI");
}
return session;
}
public static void clearSession() {
getSession().clear();
}
public static boolean isTransactionOpen() {
if (getSession().getTransaction().isActive()) {
return true;
}
return false;
}
public static void abrirTransaction() {
if (!isTransactionOpen()) {
getSession().beginTransaction().begin();
}
}
public static void commitTransaction() {
flushSession();
getSession().getTransaction().commit();
}
public static void rollBack() {
getSession().getTransaction().rollback();
}
public static void closeSession() {
getSession().close();
DAO.session.set(null);
}
public static void flushSession() {
getSession().flush();
}
public static void reOpenSession() {
// clearSession();
// flushSession();
clearSession();
closeSession();
getSession();
// clearSession();
// flushSession();
}
}退出方法更改为分离状态。表示从会话中删除对象,而不是使用保存方法。 我认为以下陈述是问题的根源
DAO.getSession().evict(clazz.getClass().getCanonicalName());
及
删除此项,替换为save(),您的问题将得到解决
例如:
session.beginTransaction();
Stock stock = new Stock();
stock.setStockCode("k0923");
stock.setStockName("elias");
session.save(stock);
经过进一步搜索,我找到了问题的根源: 我改变了方法 私有静态最终ThreadLocal会话=新ThreadLocal() 现在是:
private Session session;
public Session getSession() {
if (session == null || !session.isOpen()) {
session = HibernateUtil.getInstance().getSessionFactory().openSession();
}
return session;
}
默认情况下,二级缓存将被禁用。你能提供你的配置XML吗?我更新了文件。我正在尝试一些其他的东西,但仍然得到旧的数据我可以看到你没有使用任何二级缓存。所以说禁用缓存毫无意义。使用setCacheMode(CacheMode.REFRESH)的任何特定原因;我想你可以删除它。我使用了setCacheMode(CacheMode.REFRESH);以尝试清除缓存,但仍不起作用。我想我会像你说的那样删除它。我删除了逐出方法。仍在获取旧数据。使用save方法是什么意思?我应该删除逐出还是用save替换它们?我尝试使用save方法,但我的问题仍然没有解决。classe=(T)DAO.getSession().merge(clazz);DAO.flushSession();DAO.getSession().refresh(classe);salvarLogGeral(clazz,(EduPadrao)级,“S”);DAO.getSession().save(classe);//DAO.getSession().execut(clazz);//DAO.getSession().recit(clazz.getClass().getCanonicalName());提交交易();实际上我使用的是合并而不是保存。有什么问题吗?我删除了逐出(对象),我只使用合并(对象);现在
<?xml version="1.0" encoding="UTF-8"?>
<property name="dialect">org.hibernate.dialect.DB2Dialect</property>
<property name="hibernate.connection.driver_class">com.ibm.db2.jcc.DB2Driver</property>
<property name="hibernate.connection.url">jdbc:db2://localhost:50000/database</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">mypassword</property>
<property name="hibernate.current_session_context_class">managed</property>
<property name="hibernate.cache.use_second_level_cache">false</property>
<property name="hibernate.cache.use_query_cache">false</property>
<property name="cache.region_factory">org.hibernate.cache.impl.NoCachingRegionFactory</property>
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<property name="show_sql">true</property>
<property name="hibernate.connection.isolation">2</property>
<mapping class="EduProduto"/>
oUsuario"/>
</session-factory>
public static Session getSession() {
Session session = (Session) DAO.session.get();
if (session == null) {
session = HibernateUtil.getInstance().getSessionFactory().openSession();
session.getSessionFactory().evict(EduProduto.class);
session.setCacheMode(CacheMode.REFRESH);
session.setFlushMode(FlushMode.ALWAYS);
DAO.session.set(session);
//Messagebox.show("CAIU AQUI");
//System.out.println("CAIU AQUI");
}
return session;
}
private static final ThreadLocal session = new ThreadLocal();
public DAO(Class classe) {
}
public static Session getSession() {
Session session = (Session) DAO.session.get();
if (session == null) {
session = HibernateUtil.getInstance().getSessionFactory().openSession();
//session.getSessionFactory().evict(EduProduto.class);
session.setCacheMode(CacheMode.REFRESH);
session.setFlushMode(FlushMode.ALWAYS);
DAO.session.set(session);
//Messagebox.show("CAIU AQUI");
//System.out.println("CAIU AQUI");
}
return session;
}
public static void clearSession() {
getSession().clear();
}
public static boolean isTransactionOpen() {
if (getSession().getTransaction().isActive()) {
return true;
}
return false;
}
public static void abrirTransaction() {
if (!isTransactionOpen()) {
getSession().beginTransaction().begin();
}
}
public static void commitTransaction() {
flushSession();
getSession().getTransaction().commit();
}
public static void rollBack() {
getSession().getTransaction().rollback();
}
public static void closeSession() {
getSession().close();
DAO.session.set(null);
}
public static void flushSession() {
getSession().flush();
}
public static void reOpenSession() {
// clearSession();
// flushSession();
clearSession();
closeSession();
getSession();
// clearSession();
// flushSession();
}
DAO.getSession().evict(clazz.getClass().getCanonicalName());
session.getSessionFactory().evict(EduProduto.class);
session.beginTransaction();
Stock stock = new Stock();
stock.setStockCode("k0923");
stock.setStockName("elias");
session.save(stock);
public static Session getSession() {
Session session = (Session) DAO.session.get();
if (session == null) {
session = HibernateUtil.getInstance().getSessionFactory().openSession();
//session.getSessionFactory().evict(EduProduto.class);
session.setCacheMode(CacheMode.REFRESH);
session.setFlushMode(FlushMode.ALWAYS);
DAO.session.set(session);
//Messagebox.show("CAIU AQUI");
//System.out.println("CAIU AQUI");
}
return session;
}
private Session session;
public Session getSession() {
if (session == null || !session.isOpen()) {
session = HibernateUtil.getInstance().getSessionFactory().openSession();
}
return session;
}