第二节 hibernate session基本方法介绍
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第二节 hibernate session基本方法介绍相关的知识,希望对你有一定的参考价值。
Hibernate session 对象是和数据库建立连接的对象,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.User
at 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; } }
写累了,明天再写,未完待续
请勿转载,谢谢合作
以上是关于第二节 hibernate session基本方法介绍的主要内容,如果未能解决你的问题,请参考以下文章