JPA缓存的问题,急急急!!!!

mingxian 2013-08-23 09:01:30
有个问题请教各位大神,我的环境是Struts2+spring 3.1+jpa,遇到一个问题就是,新增一条数据成功(数据库中已成功插入),但是在随后的获取数据中却没有这一条数据。不断地刷新页面的话,有时会出现这条数据,有时又没有。分析来分析去都应该是JPA缓存的问题,但是在项目配置中并没有配置缓存啊,不知道这个问题要怎么解决,请各位大神指教。
...全文
491 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_22911843 2014-11-04
  • 打赏
  • 举报
回复
加个排序应该就好了
猎魔人-不纯 2014-11-04
  • 打赏
  • 举报
回复
事务边界过大?
彳卸风 2014-11-04
  • 打赏
  • 举报
回复
引用 10 楼 mingxian 的回复:
有人遇到过这种情况吗?
me too
  • 打赏
  • 举报
回复
因为在数据库中已经有数据了,所以跟JPA应该没有关系。 有可能是浏览器的缓存问题,清下缓存试试。 还有就是可以debug一下,查询页面是否走后台了,如果没有走,那肯定是浏览器缓存问题。
wenjie4892543 2013-08-23
  • 打赏
  • 举报
回复
个人观点:你自己的查询代码有问题导致了数据显示时有时无。 不行就 输出 hql 语句 在 数据库 中 执行 看看 就知道了
mingxian 2013-08-23
  • 打赏
  • 举报
回复

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;
}
这是查询代码,没什么问题啊
jiekou0704 2013-08-23
  • 打赏
  • 举报
回复
会不会是自己的查询代码有问题导致了数据显示时有时无?
mingxian 2013-08-23
  • 打赏
  • 举报
回复
事务是手动提交,代码如下:

EntityManagerHelper.beginTransaction();
getEntityManager().persist(entity);
EntityManagerHelper.commit();
事务应该是提交了的,看到数据库里已经新增了这条数据后再刷新页面的,结果有时会出现这条数据,有时又不出现
zuxianghuang 2013-08-23
  • 打赏
  • 举报
回复
你的事务不是手动提交的吧, 你插入了一条数据,然后查询,如果这两个动作在一个session里。事务还没提交。 所以查不到数据, 你可以在插入一条数据后,flush()一下。 也可以在控制类里调用service的两个方法(一个插入,一个查询) 也可以重新用一个线程查询,
mingxian 2013-08-23
  • 打赏
  • 举报
回复
是的,数据库中已经有了新增的数据,但是页面没有显示新增的数据,刷新多几次后又出现那条新增的数据,再刷新几次又没有了
  • 打赏
  • 举报
回复
新增数据成功后,确定数据库里面有了么? 页面没有显示新增的数据么?
mingxian 2013-08-23
  • 打赏
  • 举报
回复
有人遇到过这种情况吗?
mingxian 2013-08-23
  • 打赏
  • 举报
回复
引用 7 楼 wenjie4892543 的回复:
个人观点:你自己的查询代码有问题导致了数据显示时有时无。 不行就 输出 hql 语句 在 数据库 中 执行 看看 就知道了
把输出的HQL语句在数据库中执行了,是可以查出数据的
引用 8 楼 long121268 的回复:
因为在数据库中已经有数据了,所以跟JPA应该没有关系。 有可能是浏览器的缓存问题,清下缓存试试。 还有就是可以debug一下,查询页面是否走后台了,如果没有走,那肯定是浏览器缓存问题。
浏览器的缓存问题我也考虑过,清空了缓存还是一样有这种情况。。。。。

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧