您的位置:首页 > 数据库

Hibernate主键生成策略与save()方法是否发sql语句的研究

2012-03-16 18:24 579 查看
public class SessionFlushTest extends TestCase {

/**

* 测试uuid主键生成策略

*/

public void testSave1() {

Session session = null;

Transaction tx = null;

try {

session = HibernateUtils.getSession();

tx = session.beginTransaction();

User1 user = new User1();

user.setName("李四");

user.setPassword("123");

user.setCreateTime(new Date());

user.setExpireTime(new Date());

//因为user的主键生成侧路采用的是uuid,所以调用完成save后,只是将user纳入到了session的管理

//不会发出insert语句,但是id已经生成,session中existsInDatebase状态为false

session.save(user);

//调用flush,hibernate会清理缓存,执行sql

//如果数据库的隔离级别设置为为提交读,那么我们可以看到flush过的数据

//并且session中existsInDatebase状态为true

session.flush();

//提交事务

//默认情况下commit操作会先执行flush清理缓存,所以不用显示的调用flush

//commit后数据是无法回滚的

tx.commit();

}catch(Exception e) {

e.printStackTrace();

tx.rollback();

}finally {

HibernateUtils.closeSession(session);

}

}

/**

* 测试native主键生成策略

*/

public void testSave2() {

Session session = null;

Transaction tx = null;

try {

session = HibernateUtils.getSession();

tx = session.beginTransaction();

User2 user = new User2();

user.setName("张三1");

user.setPassword("123");

user.setCreateTime(new Date());

user.setExpireTime(new Date());

//因为user的主键生成策略为native,所以调用session.save后,将执行insert语句,返回有数据库生成的id

//纳入了session的管理,修改了session中existsInDatebase状态为true

//如果数据库的隔离级别设置为为提交读,那么我们可以看到save过的数据

session.save(user);

tx.commit();

}catch(Exception e) {

e.printStackTrace();

tx.rollback();

}finally {

HibernateUtils.closeSession(session);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐