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()方法:

 删除对象;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值