
hibernate
文章平均质量分 58
aguangs
这个作者很懒,什么都没留下…
展开
-
Hibernate 性能优化技巧
在处理大数据量时,会有大量的数据缓冲保存在Session的一级缓存中,这缓存大太时会严重显示性能,所以在使用Hibernate处理大数据量的,可以使用session.clear()或者session. Evict(Object) 在处理过程中,清除全部的缓存或者清除某个对象。2) 对大数据量查询时,慎用list()或者iterator()返回查询结果,1. 使用List()返回结果时...原创 2010-08-17 13:35:33 · 82 阅读 · 0 评论 -
Hibernate批量操作(JDBC批量操作)
部分内容转自 :http://gaolixu.iteye.com/blog/519086部分内容转自 :http://superjavason.iteye.com/blog/255423 -------------------------------------------------------------------------------------------- hib...原创 2011-09-06 00:24:56 · 157 阅读 · 0 评论 -
Hibernate懒加载深入分析
懒加载可以提高性能吗? 不可以简单的说"能",因为Hibernate的关系映射拖累了SQL的性能,所以想出懒加载来弥补.只是弥补而以,不会超越.所以大家不要想着使用了懒加载总体性能就提高了,其实总体性能不下降就万幸了. ---------------------------------------------------------- Hibernate的lazy属性可以配置在: (常用)<...原创 2011-09-06 00:19:56 · 126 阅读 · 0 评论 -
getSesson currentSession
1 getCurrentSession创建的session会和绑定到当前线程,而openSession不会。2 getCurrentSession创建的线程会在事务回滚或事物提交后自动关闭,而openSession必须手动关闭这里getCurrentSession本地事务(本地事务:jdbc)时 要在配置文件里进行如下设置 * 如果使用的是本地事务(jdbc事务) <pro...原创 2011-09-06 00:15:04 · 109 阅读 · 0 评论 -
Hibernate 操作Blob Clob
Photo.javaJava代码 import java.sql.Blob; import java.sql.Clob; import java.util.Date; /** * @author IBM 这是一个用于测试Hibernate大对象操作的PO * * 这是一个测试POJO, 属...原创 2011-09-05 23:46:12 · 108 阅读 · 0 评论 -
hibernate中SQLQuery的addEntity();方法
如果使用原生sql语句进行query查询时,hibernate是不会自动把结果包装成实体的。所以要手动调用addEntity(Class class)等一系列方法。如session.createSQLQuery(sql).addEntity(Class class);注意hibernate3.0.5不支持,单个参数的addEntity方法另外,hibernate3.2可以对原生sql 查询...原创 2010-10-20 10:48:29 · 410 阅读 · 0 评论 -
Hibernate的evict方法错误总结
摘自百度知道:http://zhidao.baidu.com/question/63663640.html问:先创建一个Student,然后调用session.save方法,然后再调用evict方法把Student对象清除出缓存,再提交事务, 可是会报错:Exception in thread "main" org.hibernate.AssertionFailure: possible nont...原创 2010-10-14 10:08:48 · 854 阅读 · 0 评论 -
hibernate中get方法和load方法的区别
键字: hibernate get load 区别 hibernate中get方法和load方法的根本区别在于:如果你使用load方法,hibernate认为该id对应的对象(数据库记录)在数据库中是一定存在的,所以它可以放心的使用,它可以放心的使用代理来延迟加载该对象。在用到对象中的其他属性数据时才查询数据库,但是万一数据库中不存在该记录,那没办法,只能抛异常,所说的load方法抛异常是指在...原创 2010-10-14 09:57:36 · 129 阅读 · 0 评论 -
Hibernate: 设A引用了B,则删A后可能要evict(A.getB())
Hibernate: 设A引用了B,如果要先取A删A再取B删B,则删A后可能要evict(A.getB()),才能顺利删除B 否则,就会报错:a different object with the same identifier value was already associated with the session 原理是这样的: 第一步将A从数据库中取出时,它引用的B也从数据库...原创 2010-10-14 09:56:43 · 100 阅读 · 0 评论 -
Criteria查询,DetachedCriteria离线查询 --做综合查询
通过Session得到Criteria类的对象Java代码 /** * 用Criteria方便的综合查询 Criteria类有丰富的比较方法 * * 如:大于,小于,等于, not null, in,null, like, isEmpty.... */ public static void select() ...原创 2011-09-06 00:25:49 · 114 阅读 · 0 评论 -
Hibernate中的cascade和inverse
这两个属性都用于一多对或者多对多的关系中。而inverse特别是用于双向关系,在单向关系中我们并不需要。 Cascade代表是否执行级联操作,Inverse代表是否由己方维护关系。 Cascade: Cascade属性的可能值有 all: 所有情况下均进行关联操作,即save-update和delete。 none: 所有情况下均不进行关联操作。这是默认值...原创 2011-01-31 00:31:54 · 91 阅读 · 0 评论 -
Hibernate的fetch="join"和fetch="select"
fetch参数指定了关联对象抓取的方式是select查询还是join查询,select方式时先查询返回要查询的主体对象(列表),再根据关联外键id,每一个对象发一个select查询,获取关联的对象,形成n+1次查询; 而join方式,主体对象和关联对象用一句外键关联的sql同时查询出来,不会形成多次查询。 如果你的关联对象是延迟加载的,它当然不会去查询关联对象。 另外,在hql查询中配置文件中设置...原创 2011-03-24 14:16:23 · 101 阅读 · 0 评论 -
Hibernate的Criteria用法总结
最近在项目中使用 Struts 和 Hibernate 进行开发,有感于 Criteria 比较好用,在查询方法设计上可以灵活的根据 Criteria 的特点来方便地进行查询条件的组装。现在对 Hibernate的Criteria 的用法进行总结: Hibernate 设计了 CriteriaSpecification 作为 Criteria 的父接口,下面提供了 Criteria和Detac...原创 2011-03-23 10:53:30 · 102 阅读 · 0 评论 -
batch_size 和 fetch_size作用
hibernate抓取策略,,batch-szie在<class>上的应用batch-size属性,可以批量加载实体类,hbm.xmlclasses.hbm.xml<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibern...原创 2010-12-01 21:37:56 · 562 阅读 · 0 评论 -
第29讲--为Spring集成的Hibernate配置二级缓存
合理的使用缓存策略,往往在web开发中提高性能起到关键作用。 为Spring集成的Hibernate配置二级缓存 步骤: 1.修改beans.xml,加上 ,我们这里使用的EhCache,还有OSCache,JBossCache 也可以使用 <!-- 打开hibernate的二级缓存 --> ...原创 2011-03-10 23:16:13 · 79 阅读 · 0 评论 -
hibernate抓取策略
Hibernate最让人头大的就是对集合的加载形式。书看了N次了,还是没有真正理解Hibernate。所以下午专门做了下测试,对配置文件的意思加深了认识。假设有两个表,Photos(一) --- picture(多)Photo包含picture集合结论1: HQL代码 > fetch(配置) > lazy (配置)结论2: 默认 lazy="true"结论3: fetch 和 lazy...原创 2011-02-12 13:23:11 · 93 阅读 · 0 评论 -
Hibernate笔记:HQL查询总结(一)——简单属性查询和实体对象查询
本文一部分转自kuangbaoxu的博文hibernate------hql总结博文地址:http://kuangbaoxu.iteye.com/blog/193076 在HQL中关键字不区分大小写,但是属性和类名区分大小写 一、简单属性查询1.单一属性查询,返回结果集属性列表,元素类型和实体类中相应的属性类型一致//查询单个字段String hql = " ...原创 2011-02-01 23:38:28 · 351 阅读 · 0 评论 -
Hibernate笔记:HQL查询总结(二)——条件查询
条件查询 1.拼字符串where条件后面,可以用字符串连接组成条件String hql = " select s.id, s.name from Student s where s.name like '%1%'";Query query = session.createQuery(hql);List list = query.list();for (Iterato...原创 2011-02-01 23:35:05 · 143 阅读 · 0 评论 -
Hibernate属性延迟加载
Hibernate3开始增加了通过property节点的lazy属性,为特定的属性指定延迟加载策略,以避免实体整体加载可能带来的性能浪费,尤其是像长文本之类的大字段。那么实现属性延迟加载需要做两件事: 1.修改映射配置文件,将需要延迟加载的字段增加lazy属性并设置成true; 2.与实体和集合类型的延迟加载不同,Hibernate3属性延迟加载机制在配置外,还需要用类增...原创 2011-02-01 21:28:01 · 104 阅读 · 0 评论 -
Hibernate的flush()和evict()总结
关键字: hibernate flush() evict() 隔离级别 脏读 不可重复读 幻读 ReadUncommitted Y Y Y ReadCommitted N Y Y RepeatableRead N N Y Serializable N N N ReadCommited是oracle的默认隔离级别。可以通过悲观锁,消除不可重复读。 Repeat...原创 2010-10-14 09:53:56 · 291 阅读 · 0 评论 -
flush,commit,evict
Flush()后只是将Hibernate缓存中的数据提交到数据库,如果这时数据库处在一个事物当中,则数据库将这些SQL语句缓存起来,当Hibernate进行commit时,会告诉数据库,你可以真正提交了,这时数据才会永久保存下来,也就是被持久化了. commit()方法会先调用flush()方法,然后提交事务.提交事务意味着对数据库所做的更新会永久保持下来 commit针对事物的 flush针...原创 2010-10-14 09:52:05 · 141 阅读 · 0 评论 -
Hibernate JDBC比较及系统调优
Hibernate与JDBC比较: 第一:Hibernate作为ORM,有一个ORM固有的问题,就是由于为了持久对象的同步,不能够使用批量删除和批量更新的sql,只能按照主键一条条来操作。因此效率相对JDBC来说是比较低的。然而事情也并不总是那么绝望,只要你对Hibernate进行优化,也可以得到相当满意的速度。 [code:1] session.delete("from Cat ...原创 2010-08-29 19:47:09 · 92 阅读 · 0 评论 -
浅谈hibernate的性能优化(交流)
1、针对oracle数据库而言,Fetch Size 是设定JDBC的Statement读取数据的时候每次从数据库中取出的记录条数,一般设置为30、50、100。Oracle数据库的JDBC驱动默认的Fetch Size=15,设置Fetch Size设置为:30、50,性能会有明显提升,如果继续增大,超出100,性能提升不明显,反而会消耗内存。 即在hibernate配制文件中进行配制: 1 &...原创 2010-08-29 17:58:46 · 113 阅读 · 0 评论 -
使用批量抓取(Using batch fetching)
使用批量抓取(Using batch fetching) Hibernate可以充分有效的使用批量抓取,也就是说,如果仅一个访问代理(或集合),那么Hibernate将不载入其他未实例化的代理。 批量抓取是延迟查询抓取的优化方案,你可以在两种批量抓取方案之间进行选择:在类级别和集合级别。 类/实体级别的批量抓取很容易理解。假设你在运行时将需要面对下面的问题:你在一个Session中载入了25个 C...原创 2010-08-29 17:45:35 · 179 阅读 · 0 评论 -
hibernate.jdbc.fetch_size 和 hibernate.jdbc.batch_size
hibernate.jdbc.fetch_size 50 //读hibernate.jdbc.batch_size 30 //写 hiberante.cfg.xml(Oracle ,sql server 支持,mysql不支持) <property name="hibernate.jdbc.fetch_size">50</property><pro...原创 2010-08-29 17:39:06 · 328 阅读 · 0 评论 -
hibernate并发处理
Hibernate批量处理其实从性能上考虑,它是很不可取的,浪费了很大的内存。从它的机制上讲,Hibernate它是先把符合条件的数据查出来,放到内存当中,然后再进行操作。实际使用下来性能非常不理想,在实际使用中采用下面的第三种优化方案的数据是:100000条数据插入数据库,主流台式机的配置,需要约30分钟,呵呵,晕倒.总结下来有三种来处理以解决性能问题:1:绕过Hibernate API ,直接...原创 2010-08-22 20:52:28 · 133 阅读 · 0 评论 -
Hibernate读写Clob和Blob类型字段
数据库脚本:create table testcb(id varchar(32) primary key,name varchar(32),photo blob,description text); Hibernate.cfg.xml <?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernat...原创 2010-08-17 13:45:37 · 103 阅读 · 0 评论 -
Hibernate集合映射之List
使用List和Map有很多共性,比如说不能再1方设置inverse="true"不同的是,list可以保留元素的顺序,这个使通过一个idx字段来实现的,比如说Team和Student的1对多关系,我们给team加入学生的时候,需要记录加入的顺序,这时候我们可以使用list方式,并在student表中新增加一个idx字段(但在Student实体类中不定义idx属性) 数据库结构: ...原创 2010-08-17 13:42:50 · 127 阅读 · 0 评论 -
一个通用的泛型GenericHibernateDao
编写Spring+Hibernate框架下的应用,总是离不了编写一个通用的泛型GenericHibernateDao。查阅了网上不少的GenericHibernateDao实现,归纳整理为如下实现,供后续编码参考。GenericDao.java:<!---->package dao;import java.io.Serializable;import java.util.Col...原创 2010-08-17 13:38:53 · 84 阅读 · 0 评论 -
Hibernate应用系列之六批量处理篇
【IT168 技术文档】 摘要:很久以来,Hibernate的批处理操作的性能受一部分使用群体的质疑,他们可能还是觉得JDBC的在这方面的处理能力要强得多。我们大家都知道Hibernate是对JDBC进行轻量级别的封装,Hibernate的操作最终要回归到JDBC操作的执行。本文重点探讨Hibernate的批处理操作在性能上的影响,分三种情况来说明,分别是批量插入,批量更新,批量删除。 ...原创 2010-08-29 20:17:32 · 122 阅读 · 0 评论 -
不要依赖hibernate的二级缓存
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://eckelcn.blogbus.com/logs/8226879.html一、hibernate的二级缓存如果开启了二级缓存,hibernate在执行任何一次查询的之后,都会把得到的结果集放到缓存中,缓存结构可以看作是一个hash table,key是数据库记录的id,value是id对应的pojo对象。当用户根...原创 2010-08-29 20:52:49 · 82 阅读 · 0 评论 -
hibernate延迟加载
延迟加载: 延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作。在Hibernate中提供了对实体对象的延迟加载以及对集合的延迟加载,另外在Hibernate3中还提供了对属性的延迟加载。下面我们就分别介绍这些种类的延迟加载的细节。A、实体对象的延迟加载: 如果想对实体对象使用延迟加载,必须要在实体的映射配置文件中进行相...原创 2010-09-28 17:10:13 · 78 阅读 · 0 评论 -
MyEclipse Hibernate 快速入门中文版
HTML完整版本下载地址: http://beansoft.java-cn.org/download/MyEclipse_Hibernate_Quickstart_zh_CN.zip 719KB 不带图的 HTML 正文:MyEclipse Hibernate 快速入门 中文版翻译: 刘长炯(beasoft@126.com)Blog: http://www.blogjava.net/bea...原创 2010-09-27 16:37:23 · 138 阅读 · 0 评论 -
struts+spring+hibernate+proxool配置
转自[url] http://wt8414.iteye.com/blog/242628 [/url]收藏参考 基于ssh的proxool连接池配置 环境:MyEclipse6.0,win xp,oracle,mysql 配置文件 1:applicationContext.xmlXml代码 <?xml version="1.0" encoding="UTF-8"...原创 2010-09-27 15:58:58 · 116 阅读 · 0 评论 -
hibernate的one-to-many中set的sort与order-by
從資料庫的觀點來看,Set、Map、Bag是無序的,而List是有序的,這邊所謂的無序或有序,是指將容器中物件儲存至資料庫時,是否依容器物件中的順序來儲存。 然而從資料庫取得資料之後,您也許會希望Set、Map等容器中的物件可以依一定的順序來排列,您可以從兩個層次來容器中的物件排序,一是在載入資料後於JVM中排序,另一是在資料庫中直接使用order by子句來排序。 ...原创 2010-09-09 09:48:20 · 147 阅读 · 0 评论 -
session.flush与transaction.commit
以session的save方法为例来看一个简单、完整的事务流程,如下是代码片段:…………………………………………………………………………Session session = sessionFactory.openSession();Transaction tx = session.beginTransaction();session.save(customer);//之前已实例化好了...原创 2010-09-06 16:00:21 · 159 阅读 · 0 评论 -
Hibernate批量提交
批量插入(Batch inserts) 在hibernate的配置文件中添加 hibernate.jdbc.batch_size=20 如果要将很多对象持久化,你必须通过经常的调用 flush() 以及稍后调用 clear() 来控制第一级缓存的大小。 Session session = sessionFactory.openSession(); Transact...原创 2010-09-06 15:44:52 · 210 阅读 · 0 评论 -
获取数据方式与缓存使用
Hibernate获取数据的方式有不同的几种,其与缓存结合使用的效果也不尽相同,而Hibernate中具体怎么使用缓存其实是我们很关心的一个问题,直接涉及到性能方面。 缓存在Hibernate中主要有三个方面:一级缓存、二级缓存和查询缓存 ①一级缓存在Hibernate中对应的为session范围的缓存,也就是当session关闭时缓存即被清除,一级缓存在Hibernate中是不可配...原创 2010-08-29 21:17:36 · 149 阅读 · 0 评论 -
Hibernate缓存
hibernate的二级缓存也称进程级的缓存或SessionFactory级的缓存,可以被所有的session共享,生命周期同SessionFactory生命周期相同,SessionFactory可以管理二级缓存。 hibernate二级缓存介绍: * 实现为可插拔,通过修改hibernate.cfg.xml文件中的cache.provider_class参数来指定不同的cache生成商并使...原创 2010-08-29 21:15:46 · 80 阅读 · 0 评论 -
Hibernate建表错误,Could not determine type for: java.util.List
今天遇到 Could not determine type for: java.util.List这个错误。用hibernate 映射好好的竟然出现这个问题 。我是使用注解来标注的映射关系仔细查看代码后,发现有个注解写在了字段上,其他的都写在getter方法上。原因就在此:注解要么写在字段上,要么写在getter上,不能混合使用,否则会报这个错误。...原创 2011-04-04 22:19:44 · 340 阅读 · 0 评论