Hibernate(5)——操作对象

目录

 

1. Hibernate中4种对象状态;

2. Session常用方法讲解;


​​​​​​​

1. Hibernate中4种对象状态;

临时状态(transient):

刚用new语句创建,还没有被持久化,并且不处于Session的缓存中。处于临时状态的Java对象被称为临时对象。

 持久化状态(persistent):

已经被持久化,并且加入到Session的缓存中。处于持久状态的Java对象被称为持久化对象。

删除状态(removed):

不再处于Session的缓存中,并且Session已经计划将其从数据库中删除。处于删除状态的Java对象被称为删除对象。 

游离状态(detached):

已经被持久化,但不再处于Session的缓存中。处于游离状态的Java对象被称为游离对象。 

 

测试代码:

package com.java.service;

import com.java.model.Student;
import com.java.util.HibernateUtil;
import org.hibernate.Session;
import org.hibernate.SessionFactory;

public class StudentTest {

    public static void main(String[] args) {
        SessionFactory sessionFactory=HibernateUtil.getSessionFactory();
        Session session=sessionFactory.openSession(); // 生成一个session
        session.beginTransaction(); // 开启事务

        //临时状态
        Student s1=new Student();
        s1.setName("张三");
        Student s2=new Student();
        s2.setName("李四");

        //持久化对象
        session.save(s1);
        session.save(s2);

        //删除状态
        session.delete(s2);

        //游离状态
        session.getTransaction().commit(); // 提交事务
        session.close(); // 关闭session

        //游离状态也可以取其对象
        System.out.println(s1.getName());
        //删除状态也可以取其对象
        System.out.println(s2.getName());
    }
}

2. Session常用方法讲解;

save()方法:

将一个临时对象转变成持久化对象

package com.java.service;

import com.java.model.Student;
import com.java.util.HibernateUtil;
import org.hibernate.Session;
import org.hibernate.SessionFactory;

public class TeacherTest {

    public static void main(String[] args) {
        SessionFactory sessionFactory=HibernateUtil.getSessionFactory();
        Session session=sessionFactory.openSession(); // 生成一个session
        session.beginTransaction(); // 开启事务

        //临时对象
        Student s1=new Student();
        s1.setName("小李");
        Student s2=new Student();
        s2.setName("小王");

        //持久化对象
        session.save(s1);
        session.save(s2);

        session.getTransaction().commit(); // 提交事务
        session.close(); // 关闭session
    }
}

 Load()方法和get()方法:

相同点:

都是根据OID从数据库中加载一个持久化对象;

不同点:

1. 假如数据库中不存在与OID对应的记录,Load()方法会抛出异常,而get()方法返回null;

2. load方法默认采用延迟加载策略,get方法采用立即检索策略;

先采用Load方法; 

//数据库student表中不存在id为6的数据
        Student s=(Student)session.load(Student.class,Long.valueOf(6));
        System.out.println(s);

运行结果:显然报错!

再看看get方法;

//数据库student表中不存在id为6的数据
        Student s=(Student)session.get(Student.class,Long.valueOf(6));
        System.out.println(s);

运行结果:返回null;

update()方法:

将一个游离对象转换为持久化对象

 saveOrUpdate()方法:

包含了save()和update()方法;

若是临时对象,则调用save方法;

若是游离对象,则调用update方法;

 merge()方法:

合并对象;

delete()方法:

 删除对象;

发布了295 篇原创文章 · 获赞 100 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/qq_37084904/article/details/102690078
今日推荐