SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Session session1 = sessionFactory.openSession();
Session session2 = sessionFactory.openSession();
Transaction t1 = session1.beginTransaction();
Transaction t2 = session2.beginTransaction();
session1.beginTransaction();
Customer c = (Customer)session1.load(Customer.class, new Long(1));
// Customer c = new Customer();
// c.setName("testName3");
// c.setEmail("testEmail3");
// c.setPassword("testPw3");
// session1.save(c);
//System.out.println(c);
t1.commit();
session1.close();
//TODO 为什么不执行update???
session2.beginTransaction();
session2.saveOrUpdate(c);
//c.setName("zengqiong");
//System.out.println(c);
t2.commit();
session2.close();
请问为什么session1的load没有执行select操作,当执行System.out.println(c)时又执行select操作?另外,update操作只有在System.out.println(c)时才执行???
解决方案 »
- kindeditor 怎么换表情包........
- 一个表里的sql查询语句貌似很简单但是 问了好多人 都说不知道 纠结 ~~求助啊~
- "update tb_kucun set kcje='"+hkcje2+"' where spid='"+hid+"'"这条语句有什么错误?
- JAVA
- 麻烦Web高手看一下(急!!)
- 请教!不能解析 javax.servlet.jsp.tagext.BodyTag.EVAL_BODY_AGAIN!!!
- JSP2.0使用EL的问题
- struts2里头,动态表单怎么处理
- 没人知道这是怎么回事吗?关于数据库的连接
- 应该选择什么服务器软件???
- 各位大哥大姐们帮小弟个忙啊
- fckeditor编辑器问题,不怕分少,只怕解决不了!
{
Session session = null;// 不是线程安全的。所以Session通常跟一个事务、一个请求的生命周一样,不会重复利用
Transaction tx = null;
User user = null;
try
{
session = HibernateUtils.getSession();
tx = session.beginTransaction();
// 临时状态
user = new User();
user.setName("钱偲");
user.setPassword("987654");
user.setBirthDate(new Date());
// 持久化状态
session.save(user);
user.setName("操龙飞"); }
catch (Exception e)
{
e.printStackTrace();
tx.rollback();
}
finally
{
HibernateUtils.closeSession(session);
}
// 游离状态
user.setPassword("123456");
try
{
session = HibernateUtils.getSession();
tx = session.beginTransaction();
// 持久化状态
session.update(user);// 必须显式调用update()
user.setName("励志哥");
}
catch (Exception e)
{
e.printStackTrace();
tx.rollback();
}
finally
{
HibernateUtils.closeSession(session);
}
}
2、当我们不知道对象的状态是临时状态还是游离状态时,就会用到saveOrUpdate(),根据ID和version的值判断是save还是update。 如果有ID和version值,则调用update。如果不存在该记录,则进行insert操作。saveOrUpdate()后对象会变成持久的
p.s:我用的Hibernate版本是3.3
1、数据库中不存在与OID对应的数据时,get返回null load抛出异常
2、load 默认使用延时加载,get则忽略lazy属性的值应用时:
加载一个对象的目的是访问它的各个属性使用get,其他的则可以用load