问题描述
如下代码,flushMode是auto,为什么在执行query.lst() 的select时没有先自动执行user1入库的insert语句。按照auto的FulshMode,应该在查询前,flush时,、commit时进行缓存清理的啊。System.out.println("flushMode="+session.getFlushMode());//Transaction tx=session.beginTransaction();User user1=new User();user1.setUserID(13000000);user1.setUserName("wa1");session.save(user1);Query query = session.createQuery("from query.common.User");List lst=query.list();
解决方案
https://hibernate.atlassian.net/browse/HHH-1410 When operating outside a transaction, FlushMode.AUTO is a bad thing.Two options here:1) no-op the autoFlush processing when outside a transaction2) explicitly manage the Session's FlushMode setting when outside a transaction#1 seems more viable, since Session.setFlushMode() might cause problems (or at least extra complexity) with #2
解决方案二:
1、你是用的自动生成主键吗? 如果是 你改成assigned 或者看name=wa1的user1.setUserID(13000000);