public final Session currentSession() throws HibernateException {
Session current = existingSession( factory );
if (current == null) {
current = buildOrObtainSession();
// register a cleanup synch
current.getTransaction().registerSynchronization( buildCleanupSynch() );
// wrap the session in the transaction-protection proxy
if ( needsWrapping( current ) ) {
current = wrap( current );
}
// then bind it
doBind( current, factory );
}
return current;
}
protected Session buildOrObtainSession() {
return factory.openSession(
null,
isAutoFlushEnabled(),
isAutoCloseEnabled(),
getConnectionReleaseMode()
);
}
其中 isAutoFlushEnabled() 默认为true.
所以,用此方法得到的session不用显式关闭。
分享到:
相关推荐
Session session = HibernateSessionFactory.currentSession(); Transaction t = session.beginTransaction(); session.save(o); t.commit(); HibernateSessionFactory.closeSession(); } ``` 这里的关键步骤...
Session session = HibernateSessionFactory.currentSession(); Transaction t = session.beginTransaction(); session.save(o); t.commit(); HibernateSessionFactory.clossSession(); } ``` 2. 删除数据...
首先,通过 `HibernateSessionFactory.currentSession()` 获取当前的 Session 实例,这是 Hibernate 中处理对象与数据库交互的基本单元。然后,开启一个新的事务 `t = session.beginTransaction()`。接下来,调用 `...
Session session = SessionFactory.currentSession(); IdentitySession identitySession = new IdentitySession(session); User guolei = new User("guolei"); User guoxin = new User("guoxin"); Group group1 = ...
在代码中,我们看到`SessionFactory.currentSession()`用于获取当前的`Session`实例,这意味着该应用可能使用了某种会话管理策略,如基于Spring的事务管理。 2. **Session**: `Session`是与数据库交互的主要接口,...
Session session = HibernateSessionFactory.currentSession(); Connection conn = session.connection(); Transaction tx = session.beginTransaction(); CallableStatement cs = conn.prepareCall("{call ...
insert方法 代码如下:public void insert(Object o){Session session = HibernateSessionFactory.currentSession();Transaction t = session.beginTransaction();session.save(o);t.commit();Hibernate...
在 getCurrentSession() 方法中,SessionFactoryImpl 将获取 Session 的工作委托给了 currentSessionContext.currentSession(),currentSessionContext 是什么?它是 org.hibernate.context.CurrentSessionContext ...
* the location of the configuration file for the current session. */ private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml"; private static final ThreadLocal<Session> threadLocal = new...
Book book = currentSession().get(Book.class, ISBN); if (book != null) { currentSession().delete(book); } } @Override public void update(Book book) { currentSession().update(book); } @...
在`currentSession()`方法中,如果Session不存在,就会调用`sessionFactory.openSession()`来创建一个新的Session。Session是与数据库交互的主要接口,可以执行查询、插入、更新和删除操作。当不再需要Session时,...
Transaction transaction = session.beginTransaction(); // 以 HQL 语句创建 Query 对象 String hql = "from Person p where p.myEvents.title = :eventTitle"; Query query = session.createQuery(hql); //...
return currentSessionContext.currentSession(); } 从上面的代码可以看到,getCurrentSession 方法将获得 Session 对象的工作委托给了 currentSessionContext 对象。currentSessionContext 对象是当前 Session 的...
这里使用了ThreadLocal变量来保证每个线程都有自己的Session实例,并且提供currentSession()和closeSession()方法来分别获取和关闭Session。 ```java public class HibernateUtil { private static final ...
Session sess = HibernateUtil.currentSession(); // 开始事务 Transaction tx = sess.beginTransaction(); // 创建HQL查询 Query<Person> query = sess.createQuery("from Person p where p.myEvents.title = ...
transaction = session.beginTransaction(); // 执行数据库操作 session.save(entity); transaction.commit(); } catch (Exception e) { if (transaction != null) { transaction.rollback(); } throw new ...
return currentSession().get(User.class, id); } @Override public void saveUser(User user) { currentSession().save(user); } ... } ``` 最后,别忘了在Struts2的配置文件(struts.xml)中配置Action,...
在这个例子中,`currentSession()`方法检查当前线程的ThreadLocal变量是否有Session,如果没有,则打开新的Session并设置到ThreadLocal中,供后续代码使用。 了解这些Java多线程和ThreadLocal的基础知识对于Java...
Session session = HibernateUtil.currentSession(new MyInterceptor()); Transaction tx = session.beginTransaction(); User u = new User(); u.setName("Yeeku Lee"); u.setAge(28); u.setNationality(...
- `currentSession()` 方法确保每次调用都能获取到当前线程的 Session 实例。 ### 总结 **ThreadLocal** 是 Java 中处理多线程资源共享问题的有效机制之一。它通过为每个线程提供独立的变量副本来避免线程间的资源...