本文内容转自:林信良先生
开启Session
Session实例由SessionFactory开启获得,例如:
Configuration config = new Configuration().configure();
SessionFactory sessionFactory = config.buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
....
tx.commit();
session.close();
储存资料
透过Session,可以对资料库进行新增、删除、更新,例如使用save()新增一笔资料:
User user = new User();
user.setName("momor");
user.setAge(new Integer(26));
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
session.save(user);
tx.commit();
session.close();
取得资料
您使用get()或load()方法取得id为1的资料:
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
User user = (User) session.get(User.class, new Integer(1));
tx.commit();
session.close();
删除资料
接下来看看使用Session删除资料,可使用delete()删除资料:
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
User user = (User) session.get(User.class, new Integer(1));
session.delete(user);
tx.commit();
session.close();
更新资料
当您在同一个Session中取出资料并封装为Persistence Object,接着更新物件状态,而后将Transaction commit,则物件上的状态更新将反应至资料库中,您无需额外进行任何的更新操作。
如果您开启了一个Session,从资料表中取出资料显示到使用者介面上,之后关闭Session,当使用者在介面上操作完毕并按下储存时,这时您要重新开启一个Session,使用update()方法将物件中的资料更新至对应的资料表中:
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
User user = (User) session.get(User.class, new Integer(2));
tx.commit();
session.close();
....
user.setAge(new Integer(27));
session = sessionFactory.openSession();
tx= session.beginTransaction();
session.update(user);
tx.commit();
session.close();
Session提供了一个saveOrUpdate()方法,为资料的储存或更新提供了一个统一的操作介面,藉由定义映射文件时,设定< id>标签的unsaved-value来决定什么是新的值必需,什么是已有的值必须
更新:
<id name="id" column="id" type="java.lang.Integer" unsaved-value="null">
<generator class="native"/>
</id>
unsaved-value可以设定的值包括:
any:总是储存
none:总是更新
null:id为null时储存(预设)
valid:id为null或是指定值时储存
这样设定之后,您可以使用Session的saveOrUpdate()方法来取代update()方法。
合并状态
以这边的例子来说:
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
User user1 = (User) session.get(User.class, new Integer(2));
tx.commit();
session.close();
....
user1.setAge(new Integer(27));
session = sessionFactory.openSession();
tx= session.beginTransaction();
User user2 = (User) session.get(User.class, new Integer(2)); // 同一个id
// user1 == user2 为 false
session.update(user1); // 丢出NonUniqueObjectException
tx.commit();
session.close();
在进行update()之前,您就先从资料库中取得另一笔资料,之后再尝试更新user1,由于目前的Persistence context已载入一笔资料,并有同一个id的User 实例了,同一个Persistence context不会有两个相同id的物件实例,因此丢出NonUniqueObjectException。
就这边的例子来说,您应该使用merge()而不是update():
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
User user1 = (User) session.get(User.class, new Integer(2));
tx.commit();
session.close();
....
user1.setAge(new Integer(27));
session = sessionFactory.openSession();
tx= session.beginTransaction();
User user2 = (User) session.get(User.class, new Integer(2)); // 同一个id
User user3 = (User) session.merge(user1);
// user1 == user2 为 false
// user2 == user3 为 true
tx.commit();
session.close();
merge()会将user1与user2的状态合并,传回的物件实例就是user2原先所参考的实例。
posted on 2008-10-07 21:40 999 阅读(1458) 评论(0) 编辑 收藏 所属分类: Hibernate
分享到:
相关推荐
Hibernate数据库操作实例.zip,博客:http://blog.csdn.net/Peng_Hong_fu/article/details/53229450
对hibernate的数据库操作封装: 1.分页查询 2.保存对象 3.保存对象组 4. 更新对象 5.更新对象组 6.保存或更新对象 7.保存或更新对象组 8. 删除对象 9. 删除对象组 10.删除对象(此类的所有对象) 11.删除(HQL) 12....
hibernate查询,spring+hibernate
hibernate 操作数据库的详细图解。
hibernate数据库操作jar包
Hibernate操作数据库的方法.doc
一个经过测试,可用的hibernate数据库操作的方法 可重用性强,没有错误。
详细介绍Hibernate操作数据库的步骤,附例图
Hibernate与JDBC对于数据库的性能操作对比事例,配置,更多信息资源
使用Hibernate的Session对象操作数据库 1.初始化Hibernate:在要使用Hibernate的类的方法中实例化Configuration对象并用Configuration对象的configure()方法将hibernate.cfg.xml中的配置加载到内存,即: ...
使用Hibernate编写通用数据库操作代码
在hibernate中的数据库操作的具体讲解和说明
Hibernate多数据库支持解决方案 一、 去掉数据库级的外键关联 二、 如何动态加载.hbm.xml文件 ...五、 hibernate主键生成器(数值型主键操作方法) 六、 Oracle 转换 SQL Server 2000注意 七、 对UTF-8数据库的特殊处理
这个类完全可以实现对数据库的基本操作;此类适用于hibernate4以上版本 ;hibernate4用hibernateSupport很容易引发一系列的问题,如果想避免的话,可以用此类
Hibernate是一款优秀的ORM框架,能够连接并操作数据库,包括保存和修改数据。Spring MVC是Java的web框架,能够将Hibernate集成进去,完成数据的CRUD。Hibernate使用方便,配置响应的XML文件即可。由于spring3.x,基于...
分别使用Hibernate和JDBC操作数据库
Hibernate对数据库操作的一些理解.pdf
hibernate可以实现简单的数据库操作,可以实现简单的数据增加,数据查询,数据修改,数据删除。
hibernate同时配置多个数据库连接 可以同时连接不同IP的不同数据库