分享

Hibernate学习笔记

 iversion 2007-09-26
目前spring+hibernate+struts是JSP开发比较热门的搭配啦,今天熟悉了Hibernate顺便做个记录,算个学习文档.
环境Eclipse(3.2)+myEclipse(6.0)+Hibernate(3.1)

新建立Web Project text.
添加Hibernate
Open in new window
添加数据库映射
Open in new window


插入数据

   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("<br/>");
     
   }


读取数据(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("<br/>");
     
   }


基本的几种形态操作明白的差不多了.
唯一的要注意的一点就是关于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)文件可以添加的

       <id name="id" type="integer">
         <column name="id" />
          <generator class="sequence">
               <param name="sequence">admin_id_seq</param>
          </generator>
       </id>

这样OK插入没问题!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约