一、Hibernate对象的状态
实体类对象在Hibernate中有3中状态:瞬时,持久,脱管。
瞬时:没有和Hibernate发生任何关系,在数据库中也没有对应的记录,一旦JVM结束,对象就消失了
持久:一个对象和Hibernate发生联系,有对应的Session,并且在数据库中有对应的一条记录
脱管:一个对象虽然在数据库中有对应的一条记录,但是它所对应的Session已经关闭了。
首先new一个Product()对像,数据库中还没有对应的记录,这个时候Product对象状态是瞬时的
通过Session的save方法把对象保存在了数据库中,对象也和Session产生了联系,此时状态是持久的
最后把Session关闭了,这个对象在数据库中有对应的数据,但是已经和Session失去了联系,就是脱管的。
package com.demo.test; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import com.demo.pojo.Product; public class TestHibernate{ public static void main(String[] args){ SessionFactory sf=new Configuration().configure().buildSessionFactory(); Session s=sf.opneSession(); Product p=new Product(); p.setName("demo");//创建实体对象,然后赋值,此时只是瞬时 System.out.println("此时p是瞬时状态"); s.save(p);//调用Session的save()方法 System.out.println("此时p是持久状态"); s.close();//关闭Session连接后 System.out.println("此时p是脱管状态"); sf.close(); } }
二、Hibernate插入对象
我们可以通过for循环插入对象到数据库,使用Session的save()方法插入数据。
import org.hibernate.cfg.Configuration; import com.demo.pojo.Product; public class TestHibernate{ public static void main(String[] args){ SessionFactory sf=new Configuration().configure().buildSessionFactory(); Session s=sf.opneSession(); s.beginTransaction(); for(int i=0;i<10;i++){ Product p=new Product(); p.setName("demo"+i); p.setPrice(i); s.save(p); } s.getTransaction().commint(); s.close(); sf.close(); }
三、Hibernate获取对象
通过id获取对象有两种方式,get和load
区别:1、延迟加载 2、对于id不存在时候的处理
load: