hibernate实体对象状态

本文通过一个简单的示例代码,详细解析了Hibernate实体对象在不同场景下的状态转变过程,包括游离态(Transient)、持久态(Persistent)等,并介绍了如何通过Session的各种操作触发这些状态的变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

很多人都知道hibernate实体对象具有的状态 但都是记忆性的 对实际理解不是很强 以下是很简单的代码中 注释解释了一些对象状态
希望有帮助
public class LifeCycle
{

public static final SessionFactory sessionFactory;

static
{
sessionFactory = new Configuration().configure().buildSessionFactory();
}

public static void main(String[] args)
{
LifeCycle.lifecycle();
}

public static void lifecycle()
{
// 创建游离态实体对象User
User user = new User();
user.setName( "abc" + String.valueOf( Math.random() ) );
// 为了避免两次运行的用户名重复,所以增加了随机数
user.setPassword( "def" );
// user仍然处于游离态

Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
// 此时user对象仍然是Transient状态
session.save( user );
// 此时,user对象已经被纳入了Hibernate的实体管理容器中,并转变为Persistent状态
System.out.println( "User 1:" + user );
// 此时的id已经有值了。
get( user.getId() );
// 但并未真正的执行数据库的操作,所以无法得到对象的值
tx.commit();
// 事务被提交后,将向数据库的用户表中插入一条记录
System.out.println( "Transaction 1 commit!" );
get( user.getId() );
// 这时可以由数据库中得到刚才插入的user对象了。

Transaction tx2 = session.beginTransaction();
user.setPassword( "mmmmmmmmmmmmm" );
tx2.commit();
// 虽然这个事务中并没有调用Session的save()方法来保存user对象
// 但由于user对象处于Persistent状态,所以对user对象所做的任何修改都将被持久化到数据库中
// 那么数据库中的用户密码也应该变为了def。
System.out.println( "Transaction 2 commit!" );
session.close();

get( user.getId() );
// 此时密码已经变为新的值了
}

public static User get( String id )
{
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();

User user = (User)session.get( User.class, id );
// Hibernate在返回User对象之间会将其纳入到Hibernate的实体管理容器中
// 所以,这时的user对象是Persistent状态的
display( user );

tx.commit();
session.close();

return user;
}

public static void display( Object obj )
{
System.out.println( obj );
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值