hibernate对象的三种状态有哪些?Hibernate如何修改记录?

Java有很多种开发框架,每一种开发框架都有其独特的作用以及特点,但是不管怎样,都能够帮助开发人员简化开发工作,那hibernate对象的三种状态有哪些?接下来我们就来给大家讲解一下这方面的内容。

hibernate对象的三种状态.jpg

Hibernate中对象有三种状态: 临时状态(Transient)、持久状态(Persistent)、游离状态(Detached)。

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

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

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

Hibernate如何修改记录?

Hibernate 在 Session 接口中为我们提供了一个 update() 方法,该方法可以用来修改数据库表中的记录。

1. 在 MyTest 类中,添加一个 testUpdate() 方法,代码如下。

/**
 * 修改记录
 */
@Test
public void testUpdate()
{
    //加载 Hibernate 核心配置文件
    Configuration configuration = new Configuration()
        .configure();
    //创建一个 SessionFactory 用来获取 Session 连接对象
    SessionFactory sessionFactory = configuration.buildSessionFactory();
    //获取session 连接对象
    Session session = sessionFactory.openSession();
    //开始事务
    Transaction transaction = session.beginTransaction();
    //创建实体对象
    User user = new User();
    user.setId(3);
    //设置需要修改的字段
    user.setUserName("更新用户名");
    //直接调用 update() 方法进行修改
    session.update(user);
    //提交事务
    transaction.commit();
    //释放资源
    session.close();
    sessionFactory.close();
}

2. 执行测试方法 testUpdate(),控制台输出如下。

Hibernate:
    update
user
set
user_id = ? 
    , user_name = ? 
    , password = ? 
    , email = ?
    where
id = ?

3. 查询数据库 user 表中的数据,结果如下图。

1.png

直接使用 update() 方法修改记录

从图和控制台输出可知,update() 方法会更新指定记录的全部字段,对于我们没有指定的字段,Hibernate 则将其修改为默认值,这显然不是我们想要的结果。

通常我们会采用“先查询再修改”的方式来避免此问题的发生,即先将需要修改的记录查询出来,获得该条记录的实体对象,然后重新给该对象中的字段重新赋值,最后再使用该对象进行更新操作。

4. 修改 testUpdate() 方法的代码,采用“先查询再修改”的方式进行更新,代码如下。

/**
 * 修改记录
 */
@Test
public void testUpdate()
{
    //加载 Hibernate 核心配置文件
    Configuration configuration = new Configuration()
        .configure();
    //创建一个 SessionFactory 用来获取 Session 连接对象
    SessionFactory sessionFactory = configuration.buildSessionFactory();
    //获取session 连接对象
    Session session = sessionFactory.openSession();
    //开始事务
    Transaction transaction = session.beginTransaction();
    //现将需要修改的记录查询出来
    User user = session.get(User.class, 3);
    //设置需要修改的字段
    user.setUserName("更新用户名");
    //直接调用 update() 方法进行修改
    session.update(user);
    //提交事务
    transaction.commit();
    //释放资源
    session.close();
    sessionFactory.close();
}

5. 重新执行测试方法 testUpdate() ,控制台输出如下。

Hibernate:
    select
user0_.id as id1_0_0_
    , user0_.user_id as user_id2_0_0_
    , user0_.user_name as user_nam3_0_0_
    , user0_.password as password4_0_0_
    , user0_.email as email5_0_0_
from
user user0_
where
user0_.id = ?
    Hibernate :
    update
user
set
user_id = ? 
    , user_name = ? 
    , password = ? 
    , email = ?
    where
id = ?

6. 查询数据库 user 表中的数据,如下图。

1.png

这样我们成功地使用 Hibernate 修改了 user 表中的一条记录,其实 Hibernate 不仅可以修改记录还可以进行删除以及插入记录,总之增删改查操作都是可以的!最后大家如果想要了解更多java架构师知识,敬请关注奇Q工具网。

推荐阅读:

初学java用哪本书比较好?适合java初学者看的书

java语言能干什么?java语言应用领域

hibernate查询方式有哪些?hibernate查询方式