hibernate核心开发接口介绍

来源:互联网 发布:类似冰河软件 编辑:程序博客网 时间:2024/05/21 11:56

Configuration

(1) AnnotationConfiguration

(2) 进行配置信息的管理

(3) 用来产生SessionFactory

(4) 可以在Configure方法中指定hibernate配置文件(不指定则默认为

”hibernate.cfg.xml”)

(5) 只需关注一个方法即:buildSessionFactory()

注:不使用默认的hibernate.cfg.xml文件的情况

Teacher t = new Teacher();

t.setId(2);

t.setName("yilong");

t.setTitle("中级");

      

Configuration cfg = new AnnotationConfiguration();

SessionFactory sf =

cfg.configure(“hibernate.xml”).buildSessionFactory();

Session session = sf.openSession();

session.beginTransaction();

session.save(t);

session.getTransaction().commit();

session.close();

       sf.close();

           则程序会去找build path目录下的”hibernate.xml”文件(放在src目录下即可)

           面试 另外,还可以使用下面的方法创建一个Session

           Session session = sessionFactory.getCurrentSession();

           表示如果当前上下文环境下没有Session就自动创建一个,有就不用再创建,因此使用该方法创建的session在提交之前无论调用多少次getCurrentSession()方法得到的都是同一个Session(提交commit后再创建出来的就不一样了)

           上述的Session session = sf.openSession();方法表示直接创建一个新的Session,而不管是否已经存在,因此是比较久的一种创建Session的方法;

           另外一个更加重要的区别是通过getCurrentSession创建的Session最后不需要调用session.close()方法(调用了反而会报错),因为在提交(commit)事务后会自动close。开发项目中openSession()方法往往不能实现将两个session操作放在同一个事务里,因此用getCurrentSession()能够界定事务边界。

           上述提到的上下文环境是通过hibernate.cfg.xml配置文件设置的,表示的是从当前线程里面找是否存在Session,具体配置语句如下:

           <property name="current_session_context_class">thread</property>

里面的参数往往设置为jta或者thread(使用了getCurrentSession方法就必须将其设置为thread,否则会报错:org.hibernate.HibernateException: No CurrentSessionContext configured!)

           而使用thread则是调用基本的Connection方式管理事务:

           Connection conn = DriverManager.getConnection(“……”);

           conn.setAutoCommit(false);

           ……

           conn.commit();

           conn.setAutoCommit(true);

           但是,有些情况只用一个Connection对象是管理不了事务的(例如:分布在多台不同数据库的服务器上的事务的情况),这个时候就需要提供一个事务管理器(tomcat不行,借助spring才行,JBOSS可以)。而jta(JAVA Transaction API)就是JAVA里专门用于管理事务的API,因此jta可以解决上面的分布式事务,但是由于tomcat不提供事务管理器的功能,因此不能设置为jta