JPA缓存的问题,急急急!!!!
有个问题请教各位大神,我的环境是Struts2+spring 3.1+jpa,遇到一个问题就是,新增一条数据成功(数据库中已成功插入),但是在随后的获取数据中却没有这一条数据。不断地刷新页面的话,有时会出现这条数据,有时又没有。分析来分析去都应该是JPA缓存的问题,但是在项目配置中并没有配置缓存啊,不知道这个问题要怎么解决,请各位大神指教。 JPA Spring Cache 缓存 --------------------编程问答-------------------- 新增数据成功后,确定数据库里面有了么?页面没有显示新增的数据么? --------------------编程问答-------------------- 是的,数据库中已经有了新增的数据,但是页面没有显示新增的数据,刷新多几次后又出现那条新增的数据,再刷新几次又没有了 --------------------编程问答-------------------- 你的事务不是手动提交的吧,
你插入了一条数据,然后查询,如果这两个动作在一个session里。事务还没提交。
所以查不到数据,
你可以在插入一条数据后,flush()一下。
也可以在控制类里调用service的两个方法(一个插入,一个查询)
也可以重新用一个线程查询,
--------------------编程问答-------------------- 事务是手动提交,代码如下:
EntityManagerHelper.beginTransaction();
getEntityManager().persist(entity);
EntityManagerHelper.commit();
事务应该是提交了的,看到数据库里已经新增了这条数据后再刷新页面的,结果有时会出现这条数据,有时又不出现 --------------------编程问答-------------------- 会不会是自己的查询代码有问题导致了数据显示时有时无? --------------------编程问答--------------------
public List<Entitys> findByPage(int startPage, int pageSize){
StringBuffer hql = new StringBuffer();
hql.append("SELECT entitys ");
hql.append("FROM Entitys entitys ");
hql.append("LEFT JOIN FETCH entitys.entityses ");
hql.append("LEFT JOIN FETCH entitys.application ");
hql.append("LEFT JOIN FETCH entitys.entityType ");
hql.append("WHERE 1=1 ");
hql.append("AND entitys.entitys=NULL ");
Query query = getEntityManager().createQuery(hql.toString());
query.setFirstResult(startPage);
query.setMaxResults(pageSize);
List<Entitys> entitys = query.getResultList();
return entitys;
}
这是查询代码,没什么问题啊 --------------------编程问答-------------------- 个人观点:你自己的查询代码有问题导致了数据显示时有时无。 不行就 输出 hql 语句 在 数据库 中 执行 看看 就知道了 --------------------编程问答-------------------- 因为在数据库中已经有数据了,所以跟JPA应该没有关系。
有可能是浏览器的缓存问题,清下缓存试试。
还有就是可以debug一下,查询页面是否走后台了,如果没有走,那肯定是浏览器缓存问题。 --------------------编程问答--------------------
把输出的HQL语句在数据库中执行了,是可以查出数据的
浏览器的缓存问题我也考虑过,清空了缓存还是一样有这种情况。。。。。 --------------------编程问答-------------------- 有人遇到过这种情况吗?
补充:Java , Java EE