您的位置:首页 > 其它

hibernate核心开发接口介绍

2010-10-03 00:20 495 查看
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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: