- 浏览: 331033 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
di1984HIT:
谢谢,写的不错。
使用hector操作Cassandra -
mr_von:
非常感谢!
paoding的分词使用 -
howgoo:
http://www.dhtmlx.com/docs/prod ...
dhtmlxGrid分页与排序 -
青春的、脚步:
谢谢
spring-data-mongodb的MongoTemplate 使用小例子 -
青春的、脚步:
xiaofancn 写道青春的、脚步 写道这个能查询都个值在某 ...
spring-data-mongodb的MongoTemplate 使用小例子
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)
发表评论
-
spring cloud gateway 全局过滤器。
2019-03-17 23:11 527spring cloud gateway 网关 ... -
elasticsearch 5.4搜索
2017-05-19 08:37 148@Test public void t ... -
netty简单的操作memcached
2017-04-19 18:59 977pom文件 <dependency> ... -
juc系列-Executor框架
2017-03-20 13:34 699转自 juc系列-Executor框架 什 ... -
ReentrantLock 类
2017-03-19 21:11 11.1 什么是reentrantlock java.u ... -
juc之CountDownLatch、CyclicBarrier和Semaphore例子
2017-03-19 17:23 834import java.util.concurren ... -
netty客户端与服务端例子
2017-03-12 20:07 2799package com.snailteam.nett ... -
freemaker集成spring
2017-02-26 19:00 567<bean id="freeMark ... -
spring集成Hessian插件配置改成自动注入。
2017-02-10 15:39 834原来的配置 <bean name="/ ... -
web开发模版
2017-02-09 14:42 0# Rules reminder: # DEBUG &l ... -
Java多线程
2017-02-04 14:39 515线程状态图 新建状态(New): ... -
hash冲突解决
2017-01-23 18:30 4561、开放地址法有一个公式: m是hash表长度,di ... -
mybatis +spring 分库
2015-04-30 17:56 353<context:component-scan b ... -
Java并发任务处理例子
2014-02-12 16:06 1126public void init() { su ... -
JAVA动态代理模式
2012-10-03 01:01 1184这是我要实现的效果 public static ... -
paoding的分词使用
2012-06-13 21:30 4865paoding下载 http://code.googl ... -
使用spring-hadoop操作hadoop
2012-05-20 02:12 32参考文章 http://blog.springsource. ... -
solr3.5集成paoding和位置搜索及对solrj的使用。
2012-04-28 02:12 1980http://xiaofancn.iteye.com/blog ... -
日期处理DateUtils
2012-03-24 09:47 4812import java.text.SimpleDateF ... -
Cassandra的数据分布情况测试
2012-03-16 15:09 20341、规划种子节点ip和Token值的对应 4个种子 ...
相关推荐
hibernate hibernate hibernate hibernate hibernate
### Hibernate知识点总结 #### 一、Hibernate概述 Hibernate是一个开源的ORM(Object Relational Mapping,对象关系映射)框架,用于Java应用与关系型数据库之间的交互。它通过使用描述对象和数据库之间映射的元...
Hibernate全部知识点
通过理解并熟练运用这些知识点,J2EE开发者能有效利用Hibernate简化数据库操作,提高开发效率,并更好地维护代码。学习Hibernate不仅有助于入门J2EE开发,也是进一步深入学习Spring Data JPA等高级技术的基础。
hibernate知识点的总结,适合初学者
【hibernate主要知识点】 Hibernate 是一款流行的 Java 平台上的 ORM(对象关系映射)框架,它使得开发者可以使用面向对象的方式处理数据库操作,而无需直接编写 SQL 语句。ORM 框架如 Hibernate、TopLink 和 OJB ...
《Hibernate知识文档 知识点笔记纪要》 在Java开发中,Hibernate是一个非常重要的ORM(Object-Relational Mapping)框架,它简化了数据库与Java对象之间的交互。本笔记主要涵盖了建立第一个Hibernate项目的步骤,...
【Hibernate关键知识点详解】 Hibernate是一款强大的Java持久化框架,它为开发者提供了在关系数据库与对象模型之间进行映射的能力,从而简化了数据访问层的开发。在这个知识点大全中,我们将深入探讨Hibernate的...
hibernate的学习笔记,hibernate所以知识点全,一看就能上手........包含代码和书写格式和图片分析~~~~hibernate的学习笔记,hibernate所以知识点全,一看就能上手........包含代码和书写格式和图片分析~~~~...
【hibernate 重点知识】 一、hibernate 简介 Hibernate 是一个流行的 Java 应用程序框架,主要用于简化对象关系映射(ORM)的过程。它允许开发者使用面向对象的方式来操作数据库,通过自动映射数据库表为 Java ...
Hibernate 框架是Java开发中广泛使用的对象关系映射(ORM)工具,它简化了数据库操作,使得开发者可以通过对象模型来处理数据,无需编写大量的SQL语句。本篇文章将深入探讨Hibernate的核心概念和基本使用方法。 ...
这篇文章主要汇总了关于 Hibernate 的一些关键知识点,对于准备面试的 IT 专业人士来说非常有用。 1. **持久化**:持久化是将应用程序的数据存储在数据库中,使得数据即使在应用程序关闭后也能长期存在。在 ...
SSH基础知识之Hibernate,hibernate,spring,struts,ssh
Hibernate知识手册.chm
【标题】:“公司内部hibernate知识培训” 【描述】:在软件开发中,尤其是在Java领域,ORM(Object-Relational Mapping,对象关系映射)框架是连接业务逻辑与数据库的关键技术之一。Hibernate作为最流行的ORM框架...
【Hibernate 知识整理】 1- Hibernate 是什么? Hibernate 是一个流行的对象关系映射(ORM)框架,它允许 Java 开发者用面向对象的方式来处理数据库交互。Hibernate 自动处理 SQL 转换和数据库访问,使得开发人员...
Hibernate 知识点详解 Hibernate 是一个流行的 ORM(Object-Relational Mapping)框架,用于 Java 应用程序的持久层解决方案。下面是 Hibernate 知识点的详解: Hibernate 概述 Hibernate 是一个轻量级的 Java EE...
标题和描述都在强调"开源对象关系映射框架Hibernate知识培训",这意味着主要内容将围绕Hibernate这一框架,探讨如何进行对象关系映射(ORM)以及相关的学习和应用。 **对象关系映射(ORM)** 对象关系映射(Object...
**Hibernate 框架知识点详解** Hibernate 是一个强大的开源对象关系映射(ORM)框架,它简化了 Java 应用程序对数据库的操作。通过提供一套API和元数据,Hibernate 可以将Java类与数据库表进行映射,使得开发者可以...
Hibernate的知识点非常广泛,下面从给定文件的标题、描述、标签和部分内容中提炼出一些关键知识点进行总结。 ### Hibernate与数据库数据类型对照 Hibernate需要将Java的数据类型映射到数据库的相应类型。这部分...