-
书上总说Hibernate的session是线程不安全的,有没有人给个例子,让我运行一下,更直观5
书上总说Hibernate的session是线程不安全的,有没有人给个例子,让我运行一下,更直观
我session设置为类变量public class AThread extends Thread{ private static Session session; static { Configuration cfg = new Configuration().configure(); ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry(); SessionFactory sf = cfg.buildSessionFactory(serviceRegistry); session = sf.openSession(); } public AThread(String threadname) { super(threadname); } @Override public void run() { String threadname = this.currentThread().getName(); User user1 = new User(); user1.setName("["+threadname+"]user1"); User user2 = new User(); user2.setName("["+threadname+"]user2"); session.beginTransaction(); session.save(user1); session.save(user2); session.delete(user1); session.delete(user2); session.getTransaction().commit(); session.close(); } }
Main类public class TestMultiThread { @Test public void test1() throws InterruptedException{ AThread at = new AThread("at"); AThread bt = new AThread("bt"); at.start(); bt.start(); at.join(); bt.join(); } }
这样每次执行的结果都报错不一样,请问这样是不是说名多个线程共用一个session?大家有没有好的例子来描述session的非线程安全,让我运行一下,这样也更直观2013年1月30日 15:56
2个答案 按时间排序 按投票排序
-
你先把java的多线程研究明白了以上问题 迎刃而解,不然的话只是知其然不知其所以然 我推荐你一个视频 马士兵的j2se 里面有对java线程很详细的讲解,看完你就明白了,希望能帮到你,java线程很重要 是必会的技术,建议你看看视频 多写几个例子 慢慢就明白了
2013年1月31日 14:57
-
session说白了是一次会话:
1、A在1线程10:00 操作session插入数据
2、B在2线程10:01操作session回滚数据
3、A在1线程10:02操作session提交数据(此时session已经回滚,完蛋了)
即session应该只保证一个人使用。2013年1月31日 08:45
相关推荐
总的来说,Hibernate中Session的管理是保证多线程环境下数据一致性的重要环节。ThreadLocal提供了一种有效且便捷的解决方案,但同时也需要注意其内存消耗和内存泄漏的风险,特别是在长生命周期的线程中。理解并选择...
总结来说,Hibernate-nosession是一种优化策略,它适合于那些对性能要求较高且不涉及复杂业务逻辑的场景。通过避免频繁打开和关闭Session,可以减少资源消耗,提高系统的响应速度。在实际开发中,我们需要根据项目...
1. **非线程安全**:由于`Session`不是线程安全的,因此在多线程环境中,每个线程都应有自己的`Session`实例,以避免数据存取的混乱。 2. **轻量级**:`Session`的创建和销毁相对快速,降低了资源的消耗。 3. **第一...
Hibernate Session 绑定线程解决方案 在 Java web 开发中, Hibernate 是一个非常流行的 ORM(Object-Relational Mapping)框架,用于将 Java 对象映射到关系数据库中。然而,在使用 Hibernate 进行数据库操作时,...
Hibernate的Session接口是Java应用程序与Hibernate之间主要的运行时交互接口,它提供了对持久化对象的创建、读取和删除操作。Session的概念是基于对象的状态管理和数据库事务的,它的生命周期通常与一个物理事务绑定...
总的来说,理解并正确使用“当前线程中的Session”是Hibernate开发中的重要一环。它可以帮助我们更高效、安全地处理数据库事务,确保数据的完整性和一致性。在实际项目中,根据应用的需求和环境选择合适的事务管理...
SessionFactory是线程安全的,它是一个全局的单例对象,负责管理Session的生命周期。我们可以通过配置文件或者使用Annotation配置来初始化SessionFactory。 2. **打开和关闭Session**:在开始数据库操作前,我们...
在处理大量数据或者长时间运行的事务时,合理地管理Session的生命周期至关重要,这就涉及到了Hibernate的Session释放模式。本文将深入探讨Hibernate Session的几种释放模式,以及它们在实际开发中的应用和优缺点。 ...
在Hibernate中,`SessionFactory`是核心组件之一,它是线程安全的,用于创建`Session`对象。`SessionFactory`通常在应用启动时创建一次,然后在整个应用生命周期中复用。创建`SessionFactory`需要通过读取Hibernate...
**标题解析:**“hibernate的第一个例子”表明这是一个关于Hibernate框架的基础教程,主要目标是展示如何使用Hibernate进行数据持久化操作。 **描述分析:**描述提到这是一个超级简单的例子,包含一个持久化对象...
5. **线程安全**:`Session`不是线程安全的,因此在多线程环境中,包装类可能需要考虑如何正确管理和关闭`Session`实例,避免并发问题。 6. **简化API**:根据项目需求,包装类可以提供一些简洁的API,比如`...
SessionFactory是一个线程安全的单例对象,它根据Hibernate配置文件生成。创建SessionFactory通常在应用程序启动时完成,而Session则在需要时创建。 2. **开始事务**: 在进行任何数据库操作之前,通常需要开启一...
**Hibernate 是一个强大的Java持久化框架,用于管理数据库操作。它是ORM(对象关系映射)的一种实现,将数据库中的表映射为Java类,使得开发者可以以面向对象的方式来操作数据库。在本文中,我们将深入探讨如何创建...
在这个"android hibernate demo例子"中,开发者可能使用了一个特殊的方法或者第三方库来使Hibernate在Android上运行。 这个"OrmDemo"项目包含以下关键组件: 1. **实体类(Entity Classes)**:这些是与数据库表...
描述中提到每个步骤都有图片配合,这些图片可能是配置文件的截图、代码片段展示或者是运行结果的可视化,帮助初学者更直观地理解每个步骤的实现。 总结,"hibernate登录小例子"是一个很好的实践项目,它涵盖了...
总的来说,`Session`在Hibernate中扮演着至关重要的角色,`delete()`方法是它实现对象持久化操作的一部分,正确理解和使用这些方法对于高效地操作数据库至关重要。理解`Session`的工作原理,以及与`SessionFactory`...
在Java的持久化框架中,Hibernate是一个非常流行的ORM(对象关系...总的来说,通过这个实践教程,初学者可以深入理解Hibernate的Session工作原理,学习如何自定义Session以适应项目需求,同时掌握基本的数据库操作。
**使用Hibernate的一个完整例子** Hibernate 是一个开源的对象关系映射(ORM)框架,它简化了Java应用程序对数据库的操作。在本教程中,我们将探讨如何在实际项目中使用Hibernate进行数据库操作,通过一个完整的...
在Java的持久层框架Hibernate中,SessionFactory是核心组件之一,它是线程安全的,负责创建Session对象,每个Session对应于数据库的一次会话。配置SessionFactory主要是通过Hibernate的配置文件(通常为hibernate....
SessionFactory是Hibernate的核心组件,它是线程安全的,负责创建Session实例。Session是与数据库交互的接口,用于执行CRUD(Create、Read、Update、Delete)操作。在每次数据库操作前,我们都需要打开一个Session,...