SavaAndBatchTest.java

package com.shiryu.otm;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

public class SaveAndBatchTest {
    public static void main(String[] args) {
        // 数据保存
        // session.save();

        // session.update();我们通过update方法将一个Detached状态的对象与session重新关联起来,从而使之从新
        // 转变为Persistent状态

        // session.saveOrUpdate
        // 使用session.saveOrUpdate()方法,我们无需关心传入的参数到底处于什么状态

        // 数据的批量操作
        // 数据批量导入
        SessionFactory factory = new Configuration().configure().buildSessionFactory();
        Session session = factory.openSession();

        // 我们每隔一段时间清空session内部缓存
        /*
        * for(int i=0;i<10000;i++){ User user = new User();
        * user.setName("zhaiyu"+i); if(i%25==0){//以没25个数据作为一个处理单元 session.flush();
        * session.clear(); } } tr.commit();
        */

        // 我们可以看看在JDBC里的实现
        /*
        * PreparedStatement stmt =
        * conn.preparedStatement("insert into User(name) value(?)"); for(int
        * i=0;i<10000;i++){ stmt.setString(1, "user"+i); stmt.addBatch(); } int [
        * ]counts = stmt.executeBatch();
        */

        // 数据批量删除
        // hibernate2中session.delete("from User");
        // hibernate3 HQL中引入bulk delete/update操作
        /*
        * String hql = "delete User"; Transaction tr = session.beginTransaction();
        * Query query = session.createQuery(hql); int ret = query.executeUpdate();
        * tr.commit(); System.out.println(ret);
        */

        // 但是bulk delete/update 还是没有解决缓存同步的问题,无法保证缓存数据的一致有效性
        User user = (User) session.load(User.class, new Integer(1));
        System.out.println("user name is :" + user.getName());

        // bulk delete/update删除id=1的用户记录
        Transaction tr = session.beginTransaction();
        String hql = "delete User where id=1";
        Query query = session.createQuery(hql);
        query.executeUpdate();

        tr.commit();
        // 再次尝试加载
        user = (User) session.load(User.class, new Integer(1));
        System.out.println("user name is :" + user.getName());
        // 得到了缓存里的数据,虽然该记录已经被删除
    }
}