CoreAPI_Delete

session管理一个数据库的任务单元,简单来说就是来帮我们管理数据库的增删改查的操作,一个session里面可以执行一系列的增删改查,然后它会帮我们放到一个事务里面,已提交,数据库的状态就产生变化了。

通过save我们认识了三种状态,分别是transient、persistent、detachd,下面来看delete方法。

delete(Object object) 从数据库中删除一个持久状态对象,那么缓存中会不会清楚呢?一个persistent状态的对象delete后就变成transient状态了,缓存中没有了。从数据库里删了,它的ID号就没了,当然变成transient状态了,所以缓存里就清了。

强烈建议动手实验,什么时候会delete什么时候不会

package hjj.lch.hibernate.model;


import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;

public class HibernateCoreAPITest {

private static SessionFactory sf = null;
    
    @BeforeClass
    public static void beforeClass(){
        sf = new AnnotationConfiguration().configure().buildSessionFactory();
    }
    
    @Test
    public void testDelete() {
        Teacher t = new Teacher(); 
        t.setName("t1");
        t.setTitle("中级");
        
        Session session = sf.getCurrentSession();
        session.beginTransaction();
        session.save(t); // save后,t变成了Persistent状态
        System.out.println(t.getId());
        session.getTransaction().commit(); // commit之后,t变成了Detached状态
        
        Session session2 = sf.getCurrentSession();
        session2.beginTransaction();
        session2.delete(t); 
        session2.getTransaction().commit();
    
    }
    
    @Test
    public void testDelete2() {
        Teacher t = new Teacher(); 
        t.setName("2");
        
        Session session2 = sf.getCurrentSession();
        session2.beginTransaction();
        session2.delete(t); 
        session2.getTransaction().commit(); 
    
    }


    @AfterClass
    public static void afterClass(){
        sf.close();
    }

}

 

posted @ 2013-12-08 13:38  李鬼989  阅读(219)  评论(0编辑  收藏  举报