java hibernate session_[Java教程]第二节 hibernate session介绍以及session常用方法介绍

[Java教程]第二节 hibernate session介绍以及session常用方法介绍

0 2016-06-30 09:00:15

Session是java应用程序和hibernate框架之间的一个主要接口。它是从持久化服务中剥离出来的一个非常重要的API。

Session的主要功能是为映射的实体类的实例提供增删改查操作(User.calss 为被映射的实体类,new User()即为实例)。这些实例可能是以下三种状态之一:

1) transient: 从没有被持久化,不在Session缓存中

2) persistent: 在Session的缓存中。

3) detached: 曾经是persistent状态,现在不在Session缓存中。

1 保存对象到数据库 session.save();

按照第一节的配置,主键的生成策略为native(数据库自动生成主键),由于数据库使用的是mysql 5,所以是自增的主键生成方式。保存对象时并不需要设置id属性。@Test public void testSave() { try { User user = new User(); user.setBirthday(new java.sql.Date(0)); user.setName("binyulan"); session.save(user); } catch (HibernateException e) { if (transaction != null) { transaction.rollback(); } throw e; } }

2 保存对象到数据库 session.persist();

这个方法和session.save()方法一样,都是保存对象到数据库。但是不能设置id属性,否则抛出异常。@Test public void testPersist() { try { User user = new User(); user.setBirthday(new java.sql.Date(0)); user.setName("binyulan"); user.setId(13); session.persist(user); } catch (HibernateException e) { e.printStackTrace(); if (transaction != null) { transaction.rollback(); } throw e; } }

执行testPersist后抛出异常,如下:org.hibernate.PersistentObjectException: detached entity passed to persist: com.binyulan.domain.Userat org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:139)at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:75)

3 合并对象到数据库 session.merge();

1) 保存未设置id属性的User对象,执行insert把User对象保存到数据库中,同时返回保存后的User对象。@Test public void testMerge() { try { User user = new User(); user.setBirthday(new java.sql.Date(0)); user.setName("binyulan2"); User user1 = (User) session.merge(user); //把user属性拷贝到新建的user1对象,执行insert插入数据库,并且返回新建的user1对象,这个对象包含id,在session缓存中 System.out.println(user1 == user); //返回false。user为新建的对象,user1为新建的持久化对象,并且在session的缓存中。 } catch (HibernateException e) { e.printStackTrace(); if (transaction != null) { transaction.rollback(); } throw e; } }

2) 保存设置id属性的User对象,首先执行select查询数据库。若数据库中存在此id的记录,并且与数据库中记录不一致,则执行update操作,

若不存在此记录,否则执行insert操作。@Test public void testMerge1() { try { User user = new User(); user.setBirthday(new java.sql.Date(0)); user.setName("binyulan123"); user.setId(20); /** * 把user属性拷贝到新建的User对象,并且执行select查询数据库。 * 存在此记录且与数据库中记录不一致,执行update */ User user1 = (User) session.merge(user); System.out.println(user1 == user); //返回false。user为新建的对象,user1为新建的持久化对象,并且在session的缓存中。 /** * 把user属性拷贝到新建的User对象,并且执行select查询数据库。 * 数据库中不存在id为123456789的记录,执行insert */ user.setId(123456789L); User user2 = (User) session.merge(user); System.out.println(user2 == user); //返回false。user为新建的对象,user2为新建的持久化对象,并且在session的缓存中。 } catch (HibernateException e) { e.printStackTrace(); if (transaction != null) { transaction.rollback(); } throw e; } }

写累了,明天再写,未完待续

请勿转载,谢谢合作

本文网址:http://www.shaoqun.com/a/235383.html

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:admin@shaoqun.com。

Hibernate

0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值