📄 persistent.java
字号:
package cn.hxex.basic.exercise;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import cn.hxex.basic.model.User;
public class Persistent
{
public static final SessionFactory sessionFactory;
static
{
sessionFactory = new Configuration().configure().buildSessionFactory();
}
public static void main(String[] args)
{
Persistent.save();
}
public static void save()
{
// 创建游离态实体对象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状态
System.out.println( "User ID:" + user.getId() );
session.save( user );
// 此时,user对象已经被纳入了Hibernate的实体管理容器中,并转变为Persistent状态
// user.setPassword( "mmmmmmmmmmmmm" );
System.out.println( "User ID:" + user.getId() );
//load( user.getId() );
tx.commit();
// 事务被提交后,将向数据库的用户表中插入一条记录
System.out.println( "Transaction 1 commit!" );
//User u = load( user.getId() );
if( session.load( User.class, user.getId() )==user )
{
System.out.println( "Equals!" );
}
else
{
System.out.println( "Not Equals!" );
}
User u = load( user.getId() );
if( u==user )
{
System.out.println( "Equals!" );
}
Transaction tx2 = session.beginTransaction();
user.setPassword( "mmmmmmmmmmmmm" );
load( user.getId() );
tx2.commit();
// 虽然这个事务中并没有调用Session的save()方法来保存user对象
// 但由于user对象处于Persistent状态,所以对user对象所做的任何修改都将被持久化到数据库中
// 那么数据库中的用户密码也应该变为了def。
System.out.println( "Transaction 2 commit!" );
load( user.getId() );
session.close();
}
public static User load( String id )
{
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
User user = (User)session.load( User.class, id );
// Hibernate在返回User对象之间会将其纳入到Hibernate的实体管理容器中
// 所以,这时的user对象是Persistent状态的
System.out.println( user );
tx.commit();
session.close();
return user;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -