一级缓存很短和session的生命周期一致,一级缓存也叫session级的缓存或事务级缓存
session间不能共享一级缓存的数据,因为它会伴随session的生命周期存在和消亡
那些方法支持一级缓存:
* get()
* save()
* load()
* iterate(查询实体对象)
一级缓存只对实体对象起作用。
HQL 不支持缓存机制。
如何管理一级缓存:
* session.clear()清除所有对象,session.evict()清除某一个对象。
如何避免一次性大量的实体数据入库导致内存溢出
* 先flush,再clear
for (int i=0; i<1000; i++) {
Student student = new Student();
student.setName("s_" + i);
session.save(student);
//每20条数据就强制session将数据持久化
//同时清除缓存,避免大量数据造成内存溢出
if ( i % 20 == 0) {
session.flush();
session.clear();
}
}
如果数据量特别大,考虑采用jdbc实现,如果jdbc也不能满足要求可以考虑采用数据本身的特定导入工具