hibernate--CoreAPI_Session 忘是亡心i 2024-02-18 14:46 46阅读 0赞 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时缓存和数据库中的内容才会同步)
还没有评论,来说两句吧...