首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

浅谈hibernate的sessionFactory和session

一、hibernate是什么? Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。...二、什么是sessionfactory SessionFactory接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。这里用到了工厂模式。...在hibernate中的session并不是http中所说的session,一般把HttpSession对象称为用户会话。。。 而hibernate中的Session呢?...而且,Session是一个轻量级对象(线程不安全),通常将每个Session实例和一个数据库事务绑定,也就是每执行一个数据库事务,都应该先创建一个新的Session实例,在使用Session后,还需要关闭...那么开始继续那个故事,应为那个程序员在面试的时候,没有记起来一些事情,尤其是hibernate的session和http的session的区别,导致很郁闷。

43410
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Spring整合Hibernate 之上下文 Session 持久化对象和HibernateTemp

    HibernateTemplate和 session Spring 的 HibernateTemplate 可以管理会话和事务, 简化 DAO 实现....但使用 HibernateTemplate 意味着DAO 必须依赖于 Spring 的 API 代替 HibernateTemplate 的另一种办法是使用 Hibernate 的上下文 Session...Hibernate 上下文 Session 对象和 Spring 的事务管理合作的很好, 但此时需保证所有的DAO 方法都支持事务 注意此时不需在 beans.xml 文件中配置, 因为 Spring...这个模板使得 DAO 层依赖于Spring的API,违反了Spring 非侵入性的原则 由于hibernate4已经完全可以实现事务了 与spring3.1中的hibernatedao,hibernateTemplete...等有冲突,所以spring3.1里已经不提供hibernatedaosupport,hibernateTemplete了,只能用hibernate原始的方式用session

    64850

    Spring Web MVC和Hibernate的集成

    网上看到很多关于Spring与Hibernate的集成的文章,奈何由于那些文章写作时间较早,很多都是Spring 3 和Hibernate 4等较旧的版本。所以我在这里使用更新的版本来说明一下。...我们只要引入spring-webmvc和spring-orm这两个包,其他的Spring依赖会自动由构建工具解决。然后还需要引入数据源、Hibernate、JSTL等依赖项。...相对应的应该有两个Spring配置文件/WEB-INF/applicationContext.xml和/WEB-INF/dispatcher-servlet.xml。...前者是根配置文件,用于配置数据库等后端、全局的组件,后者是MVC配置文件,用于配置MVC和Web相关的组件。...然后在/WEB-INF/applicationContext.xml中,我们配置Hibernate和Spring集成的组件。

    72220

    Hibernate中SessionFactory是线程安全的吗?Session是线程安全的吗(两个线程能够共享同一个Session吗)?

    SessionFactory对应Hibernate的一个数据存储的概念,它是线程安全的,可以被多个线程并发访问。SessionFactory一般只会在启动的时候构建。...Session是一个轻量级非线程安全的对象(线程间不能共享session),它表示与数据库进行交互的一个工作单元。Session是由SessionFactory创建的,在任务完成之后它会被关闭。...Session是持久层服务对外提供的主要接口。Session会延迟获取数据库连接(也就是在需要的时候才会获取)。...为了避免创建太多的session,可以使用ThreadLocal将session和当前线程绑定在一起,这样可以让同一个线程获得的总是同一个session。...Hibernate 3中SessionFactory的getCurrentSession()方法就可以做到。

    1.8K20

    Hibernate的5个核心接口:Session、SessionFactory、Transaction、Query和Configuration

    ---- SessionFactory接口: SessionFactory接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。这里用到了工厂模式。...---- Session接口: Session接口负责执行被持久化对象的CRUD操作(CRUD的任务是完成与数据库的交流,包含了很多常见的SQL语句)。...需要注意的是,Session对象是非线程安全的,同时,Hibernate的Session不同于JSP应用中的HttpSession。...这里当使用Session这个术语时,其实指的是Hibernate中的Session,而以后会将HttpSession对象称为用户Session。...---- Query和Criteria接口 Query和Criteria接口负责执行各种数据库查询。它可以用HQL语言或SQL语句两种表达方式。

    51820

    spring 中配置sessionFactory及用法

    并不能保证在没有当前Session的情况下会自动创建一个新的,这取决于CurrentSessionContext的实现,SessionFactory将调用CurrentSessionContext的currentSession...如果配置了TranactionManager并且通过@Transactional或者声明的方式配置的事务边界,那么Spring会在开始事务之前通过AOP的方式为当前线程创建Session,此时调用getCurrentSession...然而,产生以上异常的原因在于Spring提供了自己的CurrentSessionContext实现,如果我们不打算使用Spring,而是自己直接从hibernate.cfg.xml创建SessionFactory...getCurrentSession()时,如果当前线程没有Session存在,则会创建一个绑定到当前线程。...在没有Spring的情况下使用Hibernate,如果没有在hibernate.cfg.xml中配置current_session_context_class,有没有JTA的话,那么程序将抛出”No CurrentSessionContext

    76720

    Hibernate文件配置

    的作用:1.加载核心配置文件 2.加载映射文件 SessionFactory:内部维护了Hibernate的连接池和Hibernate的二级缓存,是线程安全的对象,一个项目创建一个对象即可 Session...:代表Hibernate和数据库的连接对象,不是线程安全的,所以不能定义成全局的变量 Transaction:Hibernate中管理事务的对象 文件结构 ?...--如果类中的属性名和表中的字段名一直,column可以省略--> hibernate.Customer" table="customer">...SQL语句去查询 * 查询后返回的是真是对象本身 * 查询一个找不到的对象会返回null * * load方法: * 采用延迟加载(懒加载),执行到这行代码的时候...,不会发送SQL语句,当真正使用项目的时候才会发送SQL语句 * 查询后返回的是代理对象 * 查询一个找不到的对象会抛出一个异常 */ @Test //查询

    42630

    Hibernate面试题大全

    什么是SessionFactory,她是线程安全么 SessionFactory 是Hibrenate单例数据存储和线程安全的,以至于可以多线程同时访问。...区别 简述hibernate中getCurrentSession和openSession区别 1、getCurrentSession会绑定当前线程,而openSession不会,因为我们把hibernate...交给我们的spring来管理之后,我们是有事务配置,这个有事务的线程就会绑定当前的工厂里面的每一个session,而openSession是创建一个新session。...2、getCurrentSession事务是有spring来控制的,而openSession需要我们手动开启和手动提交事务, 3、getCurrentSession是不需要我们手动关闭的,因为工厂会自己管理...如果在实体类中找不到无参数的构造器,这个方法就会抛出一个InstantiationException异常。 可不可以将Hibernate的实体类定义为final类?

    2K50

    Java理论知识及面试题

    load :找不到数据的话会抛出org.hibernate.ObjectNotFoundException异常。此时hibernate会使用延迟加载加载机制   get找不到的话会返回null。...1.Hibernate一级缓存又称为“Session的缓存”。   ...2、什么是线程同步、异步?   线程同步表示,当前线程执行完后下一个线程接着执行。   线程异步表示,  在一个应用程序中,同时,有多个不同的执行路径。...a、sleep是让当前线程指定休眠时间,然后继续工作  不释放锁         b、让当前线程wait则是等待,直到有线程通知notify()唤醒他才会重新工作。释放锁 7、什么是线程池?   ...线程池节省了CLR 为每个短生存周期任务创建一个完整的线程的开销并可以在任务完成后回收资源。       3. 线程池根据当前在系统中运行的进程来优化线程时间片。       4.

    55020

    spring之整合Hibernate

    spring整合Hibernate整合什么? 1.让IOC容器来管理Hibernate的SessionFactory。 2.让Hibernate使用上spring的声明式事务。...,hql语句和sql语句是有区别的,会将数据表当作对象来看,因此数据表的首字母要大写。...最后补充一些: Spring Hibernate事务的流程: (1)在方法执行之前获取session; (2)把session和当前线程绑定,这样就可以在Dao中使用SessionFactory的getCurrentSession...()来获取session; (3)开启事务; (4)若方法正常结束,即没有出现异常,则先提交事务,然后使当前线程绑定的session解除绑定,最后关闭session; (5)若方法出现异常,则先回滚事务...,然后使当前线程绑定的session解除绑定,最后关闭session;

    46620

    聊聊spring data jpa的OpenSessionInView

    序 本文主要研究一下spring data jpa的OpenSessionInView opensessioninview.png Open Session In View Open Session...In View简称OSIV,是为了解决在mvc的controller中使用了hibernate的lazy load的属性时没有session抛出的LazyInitializationException...的preHandle方法会判断当前线程是否有EntityManagerFactory,如果没有则会创建EntityManager(openSession),然后使用TransactionSynchronizationManager.bindResource...绑定到当前线程;afterCompletion方法会使用TransactionSynchronizationManager.unbindResource进行解绑,然后关闭EntityManager 通过...在组装dto的时候根据需要显式查询 doc Eager/Lazy Loading In Hibernate Open Session in View Open Session In View模式的基本常识

    3.8K20

    进阶springHibernate*框架精选面试题

    (2)Hibernate的Session就是一种缓存,我们通常将之称为Hibernate的一级缓存,当想使用session从数据库中查询出一个对象时,Session也是先从自己内部查看是否存在这个对象,...并且Session是线程不安全的,被多个线程共享时容易出现问题。...Hibernate的二级缓存就是要为Hibernate配置一种全局缓存,让多个线程和多个事务都可以共享这个缓存。我们希望的是一个人使用过,其他人也可以使用,session没有这种效果。...来更改当前数据库中的数据,这样缓存的数据就会与数据库中的实际数据不一致。...Spring框架中的单例Beans是线程安全的么? Spring框架并没有对单例bean进行任何多线程的封装处理。关于单例bean的线程安全和并发问题需要开发者自行去搞定。

    64830

    JAVA面试锦囊(七)

    每一个action都会被注入属性,而Spring mvc更像Servlet一样,只有一个实例,每次请求执行对应的方法即可(注意:由于是单例实例,所以应当避免全局变量的修改,这样会产生线程安全问题) (3...(4) 参数传递:Struts2中自身提供多种参数接收,其实都是通过ValueStack进行传递和赋值,而Spring MVC是通过方法的参数进行接收。...Spring是J2EE应用程序框架,是轻量级的IOC和AOP的容器框架(相对于重量级的EJB),主要是针对javaBean的生命周期进行管理的轻量级容器。...● Mybatis和Hibernate有什么不同? 相同点:都是java的orm框架,屏蔽jdbc api的底层访问细节。...(不处于session中,该对象就是临时对象)。 持久化状态/托管状态:已经被持久化,加入到session的缓存中,该状态的对象为持久化 对象。

    37820

    Java面试宝典4.0版

    request : 该 Map 中包含当前 request 对象中的所有属性 session : 该 Map 中 包含当前 session 对象中的所有属性 application : 该 Map...Session 有一个缓存,被称为 Hibernate 的第一级缓存,它存放被当前工作单元加载的对象。...2.6.5Hibernate 中的 Session 指的是什么 ? 可否将单个的 Session 在多个线程间进行共享? 前面的问题问完之后,通常就会接着再问这两个问题。...Session 代表着 Hibernate 所做的一小部分工作,它负责维护者同数据库的链 接而且 不是线程安全的,也就是说, Hibernage 中的 Session 不能在多个线程间进行共享。...而 Mybatis 相对平静,工具较少,当前最 高版本 3.2 。 开发工作量 Hibernate 和 MyBatis 都有相应的代码生成工具。可以生成简单基本的 DAO 层方法。

    1.1K40
    领券