本系列博客汇总在这里:Hibernate 汇总
Session 的 flush 方法剖析
源码工程文件为:hibernate4.3_03
一、数据库的事务的隔离级别
查询 mysql 的数据库事务的隔离级别
修改 mysql 的数据库的事务隔离级别
set global tx_isolation = 'read-uncommitted';
set tx_isolation = 'read-uncommitted';
二、Session 的 flush
1、使用 uuid 主键生成策略来测试 flush
public void test1()
{
Session session = HibernateUtils.getSession();
Transaction tx = session.beginTransaction();
try
{
User user = new User();
user.setUname("魏宇轩");
user.setGender(1);
user.setBirthday(new Date());
// 因为是uuid方式生成的主键,由Session给生成,把user对象存储在Session的临时存储区,在Session的持久区,把dirty变成true
session.save(user);
// 发出sql语句,清理临时存储区,把dirty变成false
session.flush();
tx.commit();
} catch (Exception e)
{
e.printStackTrace();
tx.rollback();
} finally
{
HibernateUtils.closeResource(session);
}
}
2、使用 native 主键生成策略来测试 flush
public void test3()
{
Session session = HibernateUtils.getSession();
Transaction tx = session.beginTransaction();
try
{
User user = new User();
user.setUname("魏宇轩");
user.setGender(1);
user.setBirthday(new Date());
// 因为是使用native方式生成主键,所以save的时候要发出sql来产生主键,持久区有数据,dirty是true
session.save(user);
// 把dirty变成false
session.flush();
tx.commit();
} catch (Exception e)
{
e.printStackTrace();
tx.rollback();
} finally
{
HibernateUtils.closeResource(session);
}
}
逐出 user
public void test4()
{
Session session = HibernateUtils.getSession();
Transaction tx = session.beginTransaction();
try
{
User user = new User();
user.setUname("魏宇轩");
user.setGender(1);
user.setBirthday(new Date());
// 因为是使用native方式生成主键,所以save的时候要发出sql来产生主键,持久区有数据,dirty是true
session.save(user);
// 把user逐出Session
session.evict(user);
// Session中没有数据flush没有意义
session.flush();
// 但是commit依然会把数据提交到数据库,因为sql已经发出了
tx.commit();
} catch (Exception e)
{
e.printStackTrace();
tx.rollback();
} finally
{
HibernateUtils.closeResource(session);
}
}
三、Session 的 flush 完成大量数据入库的功能
public void test5()
{
Session session = HibernateUtils.getSession();
Transaction tx = session.beginTransaction();
try
{
for (int i = 0; i < 100009; i++)
{
User user = new User();
user.setUname("魏宇轩");
user.setGender(1);
user.setBirthday(new Date());
session.save(user);
if (i % 100 == 0)
{
session.flush();
}
}
session.flush();
tx.commit();
} catch (Exception e)
{
e.printStackTrace();
tx.rollback();
} finally
{
HibernateUtils.closeResource(session);
}
}
如有错误,欢迎指正!