zoukankan      html  css  js  c++  java
  • hibernate

    Hibernate中get和load有什么不同之处?

    get和load的最大区别是,如果在缓存中没有找到相应的对象,get将会直接访问数据库并返回一个完全初始化好的对象,而这个过程有可能会涉及到多个数据库调用;

    而load方法在缓存中没有发现对象的情况下,只会返回一个代理对象,只有在对象getId()之外的其它方法被调用时才会真正去访问数据库,这样就能在某些情况下大幅度提高性能。

    Hibernate中save、persist和saveOrUpdate这三个方法的不同之处

    save()只能INSERT记录

    saveOrUpdate()可以进行insert和update

    save()的返回值是一个Serializable对象,而persist()方法返回值为void。

    Hibernate中的SessionFactory有什么作用? SessionFactory是线程安全的吗?

    SessionFactory就是一个用于创建Hibernate的Session对象的工厂。SessionFactory通常是在应用启动时创建好的,应用程序中的代码用它来获得Session对象。

    作为一个单个的数据存储,它也是 线程安全的,所以多个线程可同时使用同一个SessionFactory。

    Java JEE应用一般只有一个SessionFactory,服务于客户请求的各线程都通过这个工厂来获得Hibernate的Session实例

    这也是为什么SessionFactory接口的实现必须是线程安全的原因。

    Hibernate中的Session指的是什么? 可否将单个的Session在多个线程间进行共享?

    Session代表着Hibernate所做的一小部分工作,它负责维护者同数据库的链接而且不是线程安全的,

    Hibernate中的Session不能在多个线程间进行共享。虽然Session会以主动滞后的方式获得数据库连接,但是Session最好还是在用完之后立即将其关闭。

    hibernate中sorted collection和ordered collection有什么不同? 

    sorted collection是通过使用 Java的Comparator在内存中进行排序的,

    ordered collection中的排序用的是数据库的order by子句。

    对于比较大的数据集,为了避免在内存中对它们进行排序而出现 Java中的OutOfMemoryError,最好使用ordered collection。

    Hibernate中transient、persistent、detached对象三者之间有什么区别? 

    在Hibernate中,对象具有三种状态:transient、persistent和detached。

    同Hibernate的session有关联的对象是persistent对象。对这种对象进行的所有修改都会按照事先设定的刷新策略,反映到数据库之中,可以在对象的任何一个属性发生改变时自动刷新,也可以通过调用Session.flush()方法显式地进行刷新。

    如果一个对象原来同Session有关联关系,但当下却没有关联关系了,这样的对象就是detached的对象。你可以通过调用任意一个session的update()或者saveOrUpdate()方法,重新将该detached对象同相应的seesion建立关联关系。

    Transient对象指的是新建的持久化类的实例,它还从未同Hibernate的任何Session有过关联关系。同样的,你可以调用persist()或者save()方法,将transient对象变成persistent对象。

    为什么在Hibernate的实体类中要提供一个无参数的构造器这一点非常重要?

    每个Hibernate实体类必须包含一个 无参数的构造器, 这是因为Hibernate框架要使用Reflection API,通过调用Class.newInstance()来创建这些实体类的实例。如果在实体类中找不到无参数的构造器,这个方法就会抛出一个InstantiationException异常。

    Hibernate中二级缓存指的是什么?

    二级缓存是在SessionFactory这个级别维护的缓存,它能够通过节省几番数据库调用往返来提高性能。二级缓存是针对整个应用而不是某个特定的session的。

    Hibernate中的查询缓存指的是什么? 

    查询缓存实际上保存的是sql查询的结果,这样再进行相同的sql查询就可以之间从缓存中拿到结果了。

    为了改善性能,查询缓存可以同二级缓存一起来使用。

  • 相关阅读:
    .net编程扫盲(*)
    接口编程扫盲(多态)
    (转)栈与堆栈的区别
    (转).NET基础拾遗(5)多线程开发基础
    (转)你应该知道的计算机网络知识
    网络代理的基础知识
    某代理网站免费IP地址抓取测试
    常用Maven插件介绍
    Maven打jar发布包的常用配置
    Apache Commons CLI 开发命令行工具示例
  • 原文地址:https://www.cnblogs.com/yuyangcoder/p/9877774.html
Copyright © 2011-2022 走看看