hibernate中查询的数据与数据库不同步问题
在数据库中增加ID相同的一条数据后,数据库里可以看出已经增加成功,但我用hibernate以下两种方法查询相同ID的数据时,得到的还是之前查询的数据,新增加的时间没有被找...
在数据库中增加ID相同的一条数据后,数据库里可以看出已经增加成功,但我用hibernate以下两种方法查询相同ID的数据时,得到的还是之前查询的数据,新增加的时间没有被找出来,第二种我ssion.flush();还是没有新增的数据,这是为什么?怎么解决呢?
谢谢哪位能指点一下我,谢了。
public ResultInfo<BlkCategoryBlock> findCategoryBlockByBlockId(
Integer blockId,PageInfo pageInfo) {
StringBuffer hql = new StringBuffer();
hql.append("from BlkCategoryBlock b where b.blkBlock.blockId=");
hql.append(blockId);
hql.append(" order by b.id desc");
return find(hql.toString(), pageInfo);
}
public List<BlkCategoryBlock> findCategoryBlockByBlockId(Integer blockId) {
StringBuffer hql = new StringBuffer();
Session session=this.getHibernateTemplate().getSessionFactory().getCurrentSession();
Query query=session.createQuery("from BlkCategoryBlock b where b.blkBlock.blockId=? order by b.id desc");
query.setParameter(0,blockId);
List <BlkCategoryBlock>list=query.list();
session.flush();
return list;
}
问题原因:
原因是hibernate中是配置了缓存
<list>
<value>.*find.*</value>
</list>
所以find查出的数据会放入到缓存中,而我插入数据用的是存储过程做的,因为存储过程会直接将数据插入到数据库中而不会放入到缓存中,所以当再次查询数据时由于缓存中并没有新插入的数据,而该方法默认又会从缓存中查找数据,就导致了查出的数据没有最新插入的那条记录,
解决方法:
我将findCategoryBlockByBlockId的名字改成queryCategoryBlockByBlockId后就不能用hibernate中的getHibernateTemplate().getSessionFactory().getCurrentSession(); 得到session了,
所以我换了种方法得到session
Session session = this.getSessionFactory().openSession();
Transaction tx=session.beginTransaction();
Transaction tx=session.beginTransaction();
Query query=session.createQuery("from BlkCategoryBlock b where b.blkBlock.blockId=? order by b.id desc");
query.setParameter(0,blockId);
list=query.list();
session.flush();
tx.commit();
session.close();
重新打开一个session就可以和数据库同步数据了,我贴出来供参考,希望大家一同分享。 展开
谢谢哪位能指点一下我,谢了。
public ResultInfo<BlkCategoryBlock> findCategoryBlockByBlockId(
Integer blockId,PageInfo pageInfo) {
StringBuffer hql = new StringBuffer();
hql.append("from BlkCategoryBlock b where b.blkBlock.blockId=");
hql.append(blockId);
hql.append(" order by b.id desc");
return find(hql.toString(), pageInfo);
}
public List<BlkCategoryBlock> findCategoryBlockByBlockId(Integer blockId) {
StringBuffer hql = new StringBuffer();
Session session=this.getHibernateTemplate().getSessionFactory().getCurrentSession();
Query query=session.createQuery("from BlkCategoryBlock b where b.blkBlock.blockId=? order by b.id desc");
query.setParameter(0,blockId);
List <BlkCategoryBlock>list=query.list();
session.flush();
return list;
}
问题原因:
原因是hibernate中是配置了缓存
<list>
<value>.*find.*</value>
</list>
所以find查出的数据会放入到缓存中,而我插入数据用的是存储过程做的,因为存储过程会直接将数据插入到数据库中而不会放入到缓存中,所以当再次查询数据时由于缓存中并没有新插入的数据,而该方法默认又会从缓存中查找数据,就导致了查出的数据没有最新插入的那条记录,
解决方法:
我将findCategoryBlockByBlockId的名字改成queryCategoryBlockByBlockId后就不能用hibernate中的getHibernateTemplate().getSessionFactory().getCurrentSession(); 得到session了,
所以我换了种方法得到session
Session session = this.getSessionFactory().openSession();
Transaction tx=session.beginTransaction();
Transaction tx=session.beginTransaction();
Query query=session.createQuery("from BlkCategoryBlock b where b.blkBlock.blockId=? order by b.id desc");
query.setParameter(0,blockId);
list=query.list();
session.flush();
tx.commit();
session.close();
重新打开一个session就可以和数据库同步数据了,我贴出来供参考,希望大家一同分享。 展开
2个回答
推荐于2016-11-05
展开全部
你所看到的数据库没反映并不是说数据库没有进行任何的更改
而是数据同步的问题
就像你同时打开两个超作数据库的窗口
在其中一个插入数据,不commit,在另外的窗口就查询不出来
但是在插入窗口是可以查询出来的
hibernate就像是你开的第二个窗口
当然楼上说的很对不修改数据库的数据是不会存在数据不同步的说法的。
这不是hibernate本身的问题哦
建议你看下数据库的知识哦
另外,站长团上有产品团购,便宜有保证
而是数据同步的问题
就像你同时打开两个超作数据库的窗口
在其中一个插入数据,不commit,在另外的窗口就查询不出来
但是在插入窗口是可以查询出来的
hibernate就像是你开的第二个窗口
当然楼上说的很对不修改数据库的数据是不会存在数据不同步的说法的。
这不是hibernate本身的问题哦
建议你看下数据库的知识哦
另外,站长团上有产品团购,便宜有保证
展开全部
你所看到的数据库没反映并不是说数据库没有进行任何的更改
而是数据同步的问题
就像你同时打开两个超作数据库的窗口
在其中一个插入数据,不commit,在另外的窗口就查询不出来
但是在插入窗口是可以查询出来的
hibernate就像是你开的第二个窗口
当然楼上说的很对不修改数据库的数据是不会存在数据不同步的说法的。
这不是hibernate本身的问题哦
建议你看下数据库的知识哦
而是数据同步的问题
就像你同时打开两个超作数据库的窗口
在其中一个插入数据,不commit,在另外的窗口就查询不出来
但是在插入窗口是可以查询出来的
hibernate就像是你开的第二个窗口
当然楼上说的很对不修改数据库的数据是不会存在数据不同步的说法的。
这不是hibernate本身的问题哦
建议你看下数据库的知识哦
追问
用hibernate插入之后可以看到数据库里面已经有了新插入的数据,所以是已经commit了的,但是再从hibernate查询的时候却查询不出来,这是为什么,我已经commit了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询