一、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:
二、持久层框架(Hibernate)
原文地址:https://www.cnblogs.com/drq1/p/8513658.html