`

hibernate知识点点滴滴

    博客分类:
  • J2EE
阅读更多

Session中的查询

//用到才会去数据库查数据 它的值会去hibernate中的session的二级缓存里去找,如果找不到目则会laxy load一下,简单来说,
Dbforum f = (Dbforum) session.load(Dbforum.class, 6);

//一次取出数据,前两者在关联表的数据,都是用到才会查数据库取。用get的时候,当为空的时候不会抛出异常,反之load会抛. 
Dbforum f = (Dbforum) s.get(Dbforum.class, 6);

 

cascade级联

Group getUsers() cascadeType.ALL
取Group时,关联的User全取出来。

设置双向的关联,保存时也要在程序中设置关联,
对于保存也会级联保存。

 

/**
         *
         * fetch=FetchType.EAGER拿父亲节点,孩子节点都拿出来
         * cascade=CascadeType.ALL级联更新
         */
        @OneToMany(mappedBy="parent",cascade=CascadeType.ALL)
        public Set<Org> getChildren() {
                return children;
        }

fetch属性对get,load有影响。

 

 

对象的三种状态
(关键在于:有没有id,id在数据库中有没有,在内存中有没有【Session缓存】)

Transient: new出来的新对象,没有id
(内存中的对象,没有id,缓存没有)
Persistent:Transient对象save后有id了,保存后的对象
(内存中有,缓存中有,有id,数据库有)
Detached:session关闭后的对象
(内存有,缓存(Session)没有,数据库有,有id)

/**
         * Transient(瞬时态): new出来的新对象,没有id。是对象是创建时,瞬时对象在内存孤立存在,它是携带信息的载体,不和数据库的数据有任何关联关系,在Hibernate中,可通过session的save()或 saveOrUpdate()方法将瞬时对象与数据库相关联,并将数据对应的插入数据库中,此时该瞬时对象转变成持久化对象。 
         */
        Dbforum f = new Dbforum();
        f.setFname("感情世界");
        
        Session s = sessionFactory.openSession();
        s.save(f);
        /**
         * Persistent(持久态):Transient对象save后有id了,保存后的对象。是该对象在数据库中已有对应的记录,并拥有一个持久化标识,如果是用hibernate的delete()方法,对应的持久对象就变成瞬时对象,因数据库中的对应数据已被删除,该对象不再与数据库的记录关联。 
    当一个session执行close()或clear()、evict()之后,持久对象变成脱管对象,此时持久对象会变成脱管对象,此时该对象虽然具有数据库识别值,但它已不在hibernate持久层的管理之下。 
  持久对象具有如下特点: 
     1. 和session实例关联; 
     2. 在数据库中有与之关联的记录。 
         */
        System.out.println(f.getFid());
        s.beginTransaction().commit();
        /**
         * Detached(托管态):session关闭后的对象。当与某持久对象关联的session被关闭后,该持久对象转变为脱管对象。当脱管对象被重新关联到session上时,并再次转变成持久对象。 
       脱管对象拥有数据库的识别值,可通过update()、saveOrUpdate()等方法,转变成持久对象。 
       脱管对象具有如下特点: 
  1.本质上与瞬时对象相同,在没有任何变量引用它时,JVM会在适当的时候将它回收; 
2. 比瞬时对象多了一个数据库记录标识值。 
         */
        
        System.out.println(f.getFid());

 

   save 和update区别 
答: save是把一个对象做为一个新的数据保存, update则是把一个脱管状态的对象或自由态对象(一定要和一个记录对应)更新到数据库,其实一个是保存一个是更新,一看都知道是有什么区别了。 
  update 和saveOrUpdate区别 
答:这个是比较好理解的,顾名思义,saveOrUpdate基本上就是合成了save和update,而update只是update;引用hibernate reference中的一段话来解释他们的使用场合和区别 
通常下面的场景会使用update()或saveOrUpdate(): 
程序在第一个session中加载对象,接着把session关闭 
该对象被传递到表现层 
对象发生了一些改动 
该对象被返回到业务逻辑层最终到持久层 
程序创建第二session调用第二个session的update()方法持久这些改动 
saveOrUpdate(po)做下面的事: 
如果该po对象已经在本session中持久化了,在本session中执行saveOrUpdate不做任何事 
如果savaOrUpdate(新po)与另一个与本session关联的po对象拥有相同的持久化标识(identifier),抛出一个异常 
org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [org.itfuture.www.po.Xtyhb#5] 
saveOrUpdate如果对象没有持久化标识(identifier)属性,对其调用save() ,否则update() 这个对象      
  flush和update区别 
答:这两个的区别好理解update操作的是在自由态或脱管状态(因session的关闭而处于脱管状态)的对象//updateSQL 
而flush是操作的在持久状态的对象。 
默认情况下,一个持久状态的对象的改动(包含set容器)是不需要update的,只要你更改了对象的值,等待hibernate flush就自动更新或保存到数据库了。hibernate flush发生在以下几种情况中: 
1, 调用某些查询的和手动flush(),session的关闭、SessionFactory关闭结合 
get()一个对象,把对象的属性进行改变,把资源关闭。 
2,transaction commit的时候(包含了flush)

 

Hibernate缓存

一级缓存:session缓存,
二级缓存:sessionFactory级别的缓存
适用:经常被访问、改动不大不会经常被改动、数量有限
相同的查询语句执行一次。
查询缓存:查询语句相同的时候起作用,依赖于二级缓存。

 

缓存算法
LRU Least Recently Used 最近很少使用
LFU Least Frequently Used 最近不常被使用(命中率低)
FIFO First In First Out
memoryStoreEvictionPolicy=

二级缓存配置
1、hibernate.cfg.xml

<property name="cache.use_second_level_cache">true</property>
        <property name="cache.provider_class">org.hibernate.cache.EhCacheProvider</property>

2、导入jar包

hibernate自带的缓存接口
Apache的Commons-logging jar包

 

3、Entity类上面添加如下注解
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)

 

 

 

分享到:
评论

相关推荐

    hibernate 的点点滴滴

    hibernate hibernate hibernate hibernate hibernate

    Hibernate知识点总结

    ### Hibernate知识点总结 #### 一、Hibernate概述 Hibernate是一个开源的ORM(Object Relational Mapping,对象关系映射)框架,用于Java应用与关系型数据库之间的交互。它通过使用描述对象和数据库之间映射的元...

    Hibernate全部知识点

    Hibernate全部知识点

    hibernate知识点总结

    通过理解并熟练运用这些知识点,J2EE开发者能有效利用Hibernate简化数据库操作,提高开发效率,并更好地维护代码。学习Hibernate不仅有助于入门J2EE开发,也是进一步深入学习Spring Data JPA等高级技术的基础。

    hibernate知识点

    hibernate知识点的总结,适合初学者

    hibernate主要知识点

    【hibernate主要知识点】 Hibernate 是一款流行的 Java 平台上的 ORM(对象关系映射)框架,它使得开发者可以使用面向对象的方式处理数据库操作,而无需直接编写 SQL 语句。ORM 框架如 Hibernate、TopLink 和 OJB ...

    Hibernate知识文档 知识点笔记纪要

    《Hibernate知识文档 知识点笔记纪要》 在Java开发中,Hibernate是一个非常重要的ORM(Object-Relational Mapping)框架,它简化了数据库与Java对象之间的交互。本笔记主要涵盖了建立第一个Hibernate项目的步骤,...

    Hibernate关键知识点大全

    【Hibernate关键知识点详解】 Hibernate是一款强大的Java持久化框架,它为开发者提供了在关系数据库与对象模型之间进行映射的能力,从而简化了数据访问层的开发。在这个知识点大全中,我们将深入探讨Hibernate的...

    hibernate的学习笔记,hibernate所以知识点全,一看就能上手

    hibernate的学习笔记,hibernate所以知识点全,一看就能上手........包含代码和书写格式和图片分析~~~~hibernate的学习笔记,hibernate所以知识点全,一看就能上手........包含代码和书写格式和图片分析~~~~...

    hibernate 重点知识原创

    【hibernate 重点知识】 一、hibernate 简介 Hibernate 是一个流行的 Java 应用程序框架,主要用于简化对象关系映射(ORM)的过程。它允许开发者使用面向对象的方式来操作数据库,通过自动映射数据库表为 Java ...

    Hibernate知识点总结(一).docx

    Hibernate 框架是Java开发中广泛使用的对象关系映射(ORM)工具,它简化了数据库操作,使得开发者可以通过对象模型来处理数据,无需编写大量的SQL语句。本篇文章将深入探讨Hibernate的核心概念和基本使用方法。 ...

    hibernate知识点汇总

    这篇文章主要汇总了关于 Hibernate 的一些关键知识点,对于准备面试的 IT 专业人士来说非常有用。 1. **持久化**:持久化是将应用程序的数据存储在数据库中,使得数据即使在应用程序关闭后也能长期存在。在 ...

    SSH基础知识之Hibernate

    SSH基础知识之Hibernate,hibernate,spring,struts,ssh

    Hibernate知识手册.chm

    Hibernate知识手册.chm

    公司内部hibernate知识培训

    【标题】:“公司内部hibernate知识培训” 【描述】:在软件开发中,尤其是在Java领域,ORM(Object-Relational Mapping,对象关系映射)框架是连接业务逻辑与数据库的关键技术之一。Hibernate作为最流行的ORM框架...

    Hibernate知识整理.doc

    【Hibernate 知识整理】 1- Hibernate 是什么? Hibernate 是一个流行的对象关系映射(ORM)框架,它允许 Java 开发者用面向对象的方式来处理数据库交互。Hibernate 自动处理 SQL 转换和数据库访问,使得开发人员...

    2023年hibernate知识点详解王成敏.doc

    Hibernate 知识点详解 Hibernate 是一个流行的 ORM(Object-Relational Mapping)框架,用于 Java 应用程序的持久层解决方案。下面是 Hibernate 知识点的详解: Hibernate 概述 Hibernate 是一个轻量级的 Java EE...

    开源对象关系映射框架Hibernate知识培训

    标题和描述都在强调"开源对象关系映射框架Hibernate知识培训",这意味着主要内容将围绕Hibernate这一框架,探讨如何进行对象关系映射(ORM)以及相关的学习和应用。 **对象关系映射(ORM)** 对象关系映射(Object...

    Hibernate框架知识点的练习代码

    **Hibernate 框架知识点详解** Hibernate 是一个强大的开源对象关系映射(ORM)框架,它简化了 Java 应用程序对数据库的操作。通过提供一套API和元数据,Hibernate 可以将Java类与数据库表进行映射,使得开发者可以...

    hibernate的知识总结

    Hibernate的知识点非常广泛,下面从给定文件的标题、描述、标签和部分内容中提炼出一些关键知识点进行总结。 ### Hibernate与数据库数据类型对照 Hibernate需要将Java的数据类型映射到数据库的相应类型。这部分...

Global site tag (gtag.js) - Google Analytics