hibernate--CoreAPI_Session

来源:互联网 发布:mac谷歌应用商店打不开 编辑:程序博客网 时间:2024/06/03 23:03

1、save()

2、delete(Object o) ; 要删除必须得有ID值:如:

package com.action;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;import org.hibernate.service.ServiceRegistryBuilder;import com.bean.Student;import com.bean.StudentPK;public class test2 {public static void main(String[] args) {// TODO Auto-generated method stub   SessionFactory sessionFactory = Ancillary.getSessionFactory();       Session session = sessionFactory.getCurrentSession();              Student student = new Student();       student.setId(1);       student.setName("王强");       student.setPassword("123456");              session.beginTransaction();       session.save(student);              Session session2 = sessionFactory.getCurrentSession();       session2.delete(student);       session.getTransaction().commit();}}

3、load(Class theClass, Serializable id)  // 重数据库中获取一条记录

       Session session2 = sessionFactory.getCurrentSession();       session2.beginTransaction();       Student student2 = (Student)session2.load(Student.class, 1);       System.out.println(student2.getName());       session2.getTransaction().commit();
以下顺序会报错:

       session2.getTransaction().commit();       System.out.println(student2.getName());

4、get(Class theClass, Serializable id)

       Session session2 = sessionFactory.getCurrentSession();       session2.beginTransaction();       Student student2 = (Student)session2.get(Student.class, 1);       session2.getTransaction().commit();       System.out.println(student2.getName());
get()和load的区别:

a、load()得到的时代理对象,等到真正用到对象内容时才会发出sql语句。

b、get()直接从数据库中加载,不会延迟。
c、不存在对应记录时表现不一样。


5、update(Object o)

   1)可以更新一个detached状态的实例对象(存在id),更新完成后变成persistent状态

   2)不能更新一个transient 状态的实例对象,如果自动设置了id,也同样可以完成更新。

       Student student = new Student();       student.setId(1);       student.setName("WU");             session.beginTransaction();       session.update(student);     //  session.save(student);       session.getTransaction().commit();
   3)指定字段不被更新:可在对应字段上设置@Column(updatable=false)

   4)设置只更新需要更新的字段

 a、XML中 ,在hbm.xml中,在标签class配置  dynamic-update="true" 即可:

   session.beginTransaction();  //开启事务   teacher teach = (teacher)session.get(teacher.class, 1);  //执行之后变成persistence状态   teach.setTitle("教授");   session.update(teach);    //执行数据库添加操作    session.getTransaction().commit(); // 事务提交   System.out.println("the end");
在同一session可以达到效果, 不同session则会更新所有字段,不过可以通过merge()来完成同样的效果(了解即可)。


b、通过HQL语句(推荐):

   session.beginTransaction();  //开启事务   Query query = session.createQuery("update teacher t set t.title = '博士' where t.id = 1"); // teacher是类名,而不是表名   query.executeUpdate();   session.getTransaction().commit(); // 事务提交   System.out.println("the end");

6、saveOrUpdate()

7、clear()

   无论是get()还是load()都会检查缓存中是否存在对象,有则从缓存中取,否则从数据库中取,调用clear()可以强制清除session缓存。

8、flush() 强制缓存和数据库中的内容同步(默认情况下是commit时缓存和数据库中的内容才会同步)