吉林省天正科技骗局:Hibernate学习笔记

来源:百度文库 编辑:偶看新闻 时间:2024/05/03 15:53:30
目前spring+hibernate+struts是JSP开发比较热门的搭配啦,今天熟悉了Hibernate顺便做个记录,算个学习文档.
环境Eclipse(3.2)+myEclipse(6.0)+Hibernate(3.1)

新建立Web Project text.
添加Hibernate

添加数据库映射



插入数据

   session  = HibernateSessionFactory.getSession();
   Admin admin = new Admin();
   admin.setName("test");
   admin.setPassword("test");
   Transaction tx = session.beginTransaction();
   session.save(admin);
   session.flush();
   tx.commit();
   HibernateSessionFactory.closeSession();


更新数据(选择更新)

   Session session = HibernateSessionFactory.getSession();
   Transaction tx = session.beginTransaction();
   String hqlUpdate = "update Admin c set c.password = :newPassword where c.id = :id";
   int updateEntities = session.createQuery(hqlUpdate)
   .setString("newPassword", "gooogle")
   .setLong("id", 2)
   .executeUpdate()
   ;
   
   tx.commit();
   HibernateSessionFactory.closeSession();



删除数据

   Session session = HibernateSessionFactory.getSession();
   Transaction tx = session.beginTransaction();
   
   Admin setAdmin = new Admin();
   setAdmin.setId(3);
   
   session.delete(setAdmin);
   
   tx.commit();
   session.close();


读取数据(根据ID)

   Admin admin = new Admin();
   admin.setId(2);
   
   Session session = HibernateSessionFactory.getSession();
   Transaction tx = session.beginTransaction();
   
   admin = (Admin) session.get(Admin.class, admin.getId());
   
   tx.commit();
   session.close();
   
   
   out.println(admin.getPassword());


读取数据(List)

   Session session = HibernateSessionFactory.getSession();
   Transaction tx = session.beginTransaction();
   
   List aList = session.createCriteria(Admin.class).addOrder(Order.desc("id")).list();
   
   tx.commit();
   session.close();
   
   Iterator getIterator = aList.iterator();
   
   while(getIterator.hasNext())
   {
     Admin av = (Admin) getIterator.next();
     
     out.println(av.getName());
     out.println("------");
     out.println(av.getPassword());
     out.println("
");
     
   }


读取数据(Limit)

   Session session = HibernateSessionFactory.getSession();
   Transaction tx = session.beginTransaction();
   
   List aList = session.createCriteria(Admin.class).addOrder(Order.desc("id")).setFirstResult(2).setMaxResults(3).list();
   
   tx.commit();
   session.close();
   
   Iterator getIterator = aList.iterator();
   
   while(getIterator.hasNext())
   {
     Admin av = (Admin) getIterator.next();
     
     out.println(av.getName());
     out.println("------");
     out.println(av.getPassword());
     out.println("
");
     
   }


基本的几种形态操作明白的差不多了.
唯一的要注意的一点就是关于PostgreSQL的使用bigserial做自增型的序列会导致Hibernate无法插入数据,报告一个异常错误为:could not get next sequence value
我在pgAdmin在数据库状态的时候运行了这么一条错误的语句 realtion "hibernate_sequence" does not exist select nextval("hibernate_sequence")
玩过PostgreSQL都知道  select nextval("hibernate_sequence") 是获取一个序列值下一个值.但是跟本没有这个序列名字.当然是错误的插入不进去..最后查阅手册里面发现可以在属性文件可以添加.就是那个你的表的映射的xml(xxx.hbm.xml)文件可以添加的

       
         
         
               admin_id_seq
         

       


这样OK插入没问题!