从某篇文章中看到: "二级缓存中list方式,查询过程中,key是对应的sql语句,value是对应记录的ID串,第二次执行相同的list查询的时候就可以根据ID串去class缓存中查找对应的ID对象。"
我有这么一句查询:
从库中随机返回40条记录;
List<T> result = session.createQuery("from MultipleChoice ORDER BY RAND()")
.setFirstResult(0).setMaxResults(40).list();
我的疑问是,如果启用了二级缓存是不是每次返回的value都是同样的ID串?如果是这样的话,就与我的本意违背了,不能随机取40个条记录了,每次都相同了。
第二个问题关于缓存策略read-only:
文中还提到:
“read-only:无需修改, 可以对其进行只读缓存,注意:在此策略下,如果直接修改数据库,
即使能够看到前台显示效果,但是将对象修改至cache中会报error,cache不会发生
作用。另:删除记录会报错,因为不能在read-only模式的对象从cache中删除。”
如果是这样的话只要某个表配置了只读的缓存,改表中的记录就没法做修改删除了?这样也太不科学了吧