博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hibernate mysql 缓存_hibernate和mysql的缓存问题,没辙了!
阅读量:1532 次
发布时间:2019-04-21

本文共 2142 字,大约阅读时间需要 7 分钟。

各位大侠好,我的hibernate出了很严重的问题,我用的数据库是mysql,大家请看下面这段代码,我每次已经把值正确插入到数据库后,下面的这个方法查询出来的还是旧数据,等页面刷新好几次后才查询出新的数据,有时候刷新一会是新的数据一会是旧的数据。

public double sumExpense(String userid,String itemid,String yearmonth){

Session session = SessionBuilder.getSession();

double sum = 0d;

String hql = "SELECT SUM(c.expenditrue) FROM Consumeaccount c WHERE c.usrplanrel.id.userbasicinfo.userid='"+userid+"' AND c.accountitmecode.itemid='"+itemid+"' AND c.dat LIKE '"+yearmonth+"%'";

Object obj = session.createQuery(hql).uniqueResult();

if(obj!=null){

sum = Double.parseDouble(obj.toString());

}

return sum;

}

上面的方法改为这个后就没问题,就是每次都重新创建新的session工厂

/**

*根据消费分类ID、模板ID、年度月份查询该消费分类的实际消费值总和

* @param itemid

* @param templateid

* @param yearmonth

* @return

*/

public double sumExpense(String userid,String itemid,String yearmonth){

SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();

Session session = sessionFactory.openSession();

double sum = 0d;

String hql = "SELECT SUM(c.expenditrue) FROM Consumeaccount c WHERE c.usrplanrel.id.userbasicinfo.userid='"+userid+"' AND c.accountitmecode.itemid='"+itemid+"' AND c.dat LIKE '"+yearmonth+"%'";

Object obj = session.createQuery(hql).uniqueResult();

if(obj!=null){

sum = Double.parseDouble(obj.toString());

}

return sum;

}

请问这个是怎么回事呢,程序中好多处都是这个问题,我的二级缓存已经关了

false

false

问题补充:

我的SessionBuilder.getSession();应该没问题的,我曾经也用了hibernate自动生成的得到session的方法,目前用的这个Thread模式public static SessionFactory sessionFactory;

static {

try {

sessionFactory = new Configuration().configure()

.buildSessionFactory();

} catch (Throwable ex) {

throw new ExceptionInInitializerError(ex);

}

}

public static final ThreadLocal session =

new ThreadLocal();

public static Session getSession() throws HibernateException {

Session s = (Session) session.get();

if(s == null) {

s = sessionFactory.openSession();

session.set(s);

}

return s;

}

public static void closeSession() throws HibernateException {

Session s = (Session) session.get();

if(s != null) {

s.close();

}

session.set(null);

}

问题补充:

首先感谢大家的回答,我的插入有事物,每次插入完成后都有flush,而且我自己在数据库里面修改一个字段刷新页面好几次才能得到新数据。至于什么数据库隔离级别我不太懂啊,但是应该和那没关系。

我自己的写的测试方法在类的main方法里面执行的时候,一直不会出现过期数据,很奇怪。

转载地址:http://jzudy.baihongyu.com/

你可能感兴趣的文章
7-25 求奇数和
查看>>
7-20 简单计算器
查看>>
7-26 最大公约数和最小公倍数
查看>>
7-27 兔子繁衍问题
查看>>
7-30 念数字
查看>>
7-31 掉入陷阱的数字
查看>>
7-33 统计素数并求和
查看>>
6-1 使用函数求素数和
查看>>
Java卡片布局(CardLayout)
查看>>
Spring Boot快速入门
查看>>
Eureka-单节和集群的搭建
查看>>
Docker安装及快速上手&常用命令使用
查看>>
Docker部署MySQL
查看>>
数据库事务&锁机制
查看>>
一篇搞懂java、javac版本不匹配发生的原因
查看>>
【HIT-软件构造】使用Gradle脱离IDE环境
查看>>
Eclipse三种文件目录folder,source folder,package的关系及Build Path的作用
查看>>
IDEA 的 debug 怎么实现?
查看>>
MySQL 5.7.16 修改密码提示 ERROR 1054 (42S22): Unknown column ''password'' in ''field list''解决
查看>>
idea Exception in thread "http-apr-8080-exec-2" java.lang.OutOfMemoryError: PermGen space
查看>>