session.persist()和save的区别???????
persist---不会缓存对象+持久化
save---会缓存对象+持久化
如果Hibernate session中缓存的太多应该经常用evict清除内存
缓存只对查询有效 更新 删除不涉及缓存优化 而是再更新或删除数据库中的对象的同时 更新后修改缓存中对象
缓存只能建立在同一种查询机制上 例如:HQL--criteria 和 session.createQuery 是不能共用同一个缓存的
二级缓存:更新操作远远低于查询操作次数时 使用二级缓存优化
以下是使用缓存的例子 准备:hibernate.cfg.xml中添加
<property name="cache.use_query_cache">true</property>
<property name="cache.provider_class">org.hibernate.cache.HashtableCacheProvider</property>
package cn.veryedu.test;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import cn.veryedu.entity.Emp;
public class TestCache1 {
public void query1(Session session) {
Query query = session.createQuery("from Emp");
query.setCacheable(true);
query.list();
// Criteria criteria = session.createCriteria(Emp.class);
// criteria.setCacheable(true);
// List result = criteria.list();
}
public void query2(Session session) {
// Criteria criteria = session.createCriteria(Emp.class);
// criteria.setCacheable(true);
// List result = criteria.list();
// Query query = session.createQuery("from Emp");
// query.setCacheable(true);
Query query = session.createQuery("from Emp");
query.setCacheable(true);
query.list();
}
/**
* @param args
*/
public static void main(String[] args) {
TestCache1 testCache1 = new TestCache1();
Configuration config = new Configuration().configure();
SessionFactory sessionFactory = config.buildSessionFactory();
Session session = sessionFactory.openSession();
testCache1.query1(session);
session.close();
session = sessionFactory.openSession();
testCache1.query2(session);
session.close();
sessionFactory.close();
}
}