- 浏览: 1328098 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (896)
- spring4 (14)
- hibernate3 (26)
- spring2 (35)
- struts2 (55)
- struts1 (15)
- 设计模式 (15)
- java (172)
- mybatis3 (11)
- sql (17)
- mysql (13)
- jbpm (10)
- J2EE (45)
- tools (29)
- js (83)
- 数据结构 (13)
- Html (26)
- web (22)
- flex (33)
- Oracle (57)
- linux (49)
- 算法 (6)
- 其它 (12)
- easyui (1)
- bootstrap (13)
- xml (2)
- tomcat (1)
- redis (10)
- activemq (2)
- webservice (11)
- maven (2)
- springboot (1)
- ubuntu (1)
- python (14)
- rocketmq (1)
- springcloud (10)
- opencv (1)
最新评论
-
mike_eclipse:
Hashtable是线程不安全的吗?好像是线程安全的吧?
多线程之集合类 -
July01:
推荐用StratoIO打印控件,浏览器和系统的兼容性都很好,而 ...
lodop打印控件 -
xingcxb:
经过测试,假的,依旧会出现中文乱码!!!!store方法里面采 ...
java 读写Properties文件,不会出现中文乱码 -
tiger20111989:
...
Spring注解方式管理事务 -
zw7534313:
...
js 文字上下滚动 无间断循环显示
你可以使用hibernate.query.substitutions
在Hibernate中定义新的查询符号. 例如:
hibernate.query.substitutions true=1, false=0
将导致符号true
和false
在生成的SQL中被翻译成整数常量.
2.在Hibernate配置文件中声明HQL“查询替代(query substitutions)”之后, 布尔表达式(Booleans)可以在其他表达式中轻松的使用:
<property name="hibernate.query.substitutions">true 1, false 0</property>
3.通过HQL的with
关键字,你可以提供额外的join条件。
from Cat as cat left join cat.kittens as kitten with kitten.bodyWeight > 10.0
4.你可以用特殊属性size
, 或是特殊函数size()
测试一个集合的大小。
from Cat cat where cat.kittens.size > 0
from Cat cat where size(cat.kittens) > 0
5.使用minelement
与maxelement
函数来 引用到一个基本数据类型的集合中最小与最大的元素。
from Calendar cal where maxelement(cal.holidays) > current_date
6.在传递一个集合的索引集或者是元素集(elements
与indices
函数) 或者传递一个子查询的结果的时候,
可以使用SQL函数any, some, all, exists, in
from Cat as cat where not exists ( from Cat as mate where mate.mate = cat )
7.T_Payrool表中去除重复的pay_Ygxmid后的总行数
select count(distinct t.payYgxmid) from TPayroll t
可以在返回的结果数据里指定每一列的类型 8.List ls2 = session.createSQLQuery(querySql).addScalar("column_name", Hibernate.DATE).list(); 这样返回的数据的时候Hiberante就会对返回的数据转换成你指定的数据类型.这个是在3.1版本就支持的操作。
9.Hibernate的fetch="join"和fetch="select"
fetch参数指定了关联对象抓取的方式是select查询还是join查询,select方式时先查询返回要查询的主体对象(列表),再根据关联外键id,每一个对象发一个select查询,获取关联的对象,形成n+1次查询; 而join方式,主体对象和关联对象用一句外键关联的sql同时查询出来,不会形成多次查询。 如果你的关联对象是延迟加载的,它当然不会去查询关联对象。 另外,在hql查询中配置文件中设置的join方式是不起作用的(而在所有其他查询方式如get、criteria或再关联获取等等都是有效的),会使用select方式,除非你在hql中指定join fetch某个关联对象。
在某种特殊的场合下,fetch在hql中还是起作用的。
例如
现有message(回帖)-->topic(主贴)-->forum(版块) 的多级many-to-one结构:
第一级:message-->topic many-to-one配置lazy="false" fetch="join"
第二级:topic-->forum many-to-one配置lazy="false" fetch="join"
这时如果"from message",则第二级:topic-->forum中的fetch策略会起作用
10.n+1问题:在默认情况下,使用query.iterator()查询,有可能有n+1问题,所谓n+1是指在查询对象的时候发出n+1条查询语句。
list和iterator到区别:
list:在默认情况下,list每次都会发出sql查询实体对象,list会向缓存里放数据,但是不会利用缓存中的数据。
iterator:首先发出一条查询id列表的sql语句,如果缓存中有与之匹配的数据,就从缓存中取得数据,否则依次根据id发出sql语句。
11.cascade级联操作,如all, save-update, delete等 inverse反向控制 把主控方交给与此关联的类,hibernate参照另一具类来处理另外inverse有个好处就是在one方发生变化的时候,不需要牵动many同时更新数据库1、到底在哪用cascade="..."?
2、到底在哪用inverse="ture"? inverse属性默认是false的,就是说关系的两端都来维护关系
当关系的两头都用inverse="true"是不对的,就会导致任何操作都不处发对关系表的操作。当两端都是inverse= "false"或是default值是,在代码对关系显示的维护也是不对的,会导致在关系表中插入两次关系。
在一对多关系中inverse就更有意义了。
12.查询总记录数
1---sql
String sql="select count(*) as count from ACCOUNT AS a "
Integer count=(Integer) getSession().createSQLQuery(sql).addScalar("count", Hibernate.INTEGER)
.uniqueResult();
也可以通过LIST对象获得 这里就不在叙述了
2---hql
String hql="select count(*) as count from Account as a";
Query query=getSession().createQuery(hql);
int count=((Number)query.iterate().next()).intValue();
13.如果集合被声明为lazy=true,在HQL中如果显式的使用 join fetch 则延迟加载失效。
from eg.Cat as cat inner join fetch cat.mate left join fetch cat.kittens
14.在one-to-many的one端显式设置fecth="join",则无论如何都采取预先抓取(生成一个SQl),延迟加载失效(生成两个SQL)
15.many-to-one的延迟加载是在配置文件的class标签设置lazy="true",one-to-many和many-to-many的延迟加载是在set标签中设置lazy="true"。而one-to-one不只要在calss标签设置lazy="true",而且要在one-to-one标签中设置constrained="true".
16.//测试MySQL的中文问题:更改内容如下,把setName的参数改为中文的内容:
person.setName("俞黎敏");
这里应当到hibernate.cfg.xml文件的<session-factory/>块中增加上如下两行设置
<property name="connection.useUnicode">true</property>
<property name="connection.characterEncoding">GBK</property>
这样插入数据与读取数据时才不会有中文的问题.
17.Hibernate中的hibernate.hbm2ddl.auto配置参数
有以下可选的值
validate 加载hibernate时,验证创建数据库表结构
create 每次加载hibernate,重新创建数据库表结构
create-drop 加载hibernate时创建,退出是删除表结构
update 加载hibernate自动更新数据库结构
none 不做任何处理
18.
集合映射:
1. 映射Map:
(1) HashMap
HashMap不保证集合中元素的顺序。
(2) LinkedHashMap:
LinkedHashMap是HashMap的子类,是一个双向链表,按照插入的顺序。
(3) TreeMap:
虽然LinkedHashMap按照插入的顺序排序,而实际上有可能插入时没有按照一定规则,但输出时需要按一定规则输出(比如按key值的字典顺序)。TreeMap实现了SortedMap接口,可以有序地取出对应位置的对象,它使用红黑树结构来排序,默认的排序方法是采用key值的升序排序。
Map map=new TreeMap(new CustomerComparator());//可以传入自定义的比较器
集合的排序:
从数据库取得数据之后,可以从两个方面来对容器中的对象排序,一是在查询数据时在数
据库中直接使用order by 子句来排序,二是在加载数据后在JVM中排序。
在映射文件中,order-by属性用来设置数据库排序,sort属性用来设置内存排序。
排序属性:
排序属性 |
<map> |
<set> |
<list> |
<bag> |
<idbag>
|
数据库排序 (order-
by)
|
支持 |
支持 |
|
支持 |
支持
|
内存排序 (sort)
|
支持 |
支持 |
|
|
|
<map order-by=”name asc”>
<set sort=”test.CustomComparator”> // 自定义的比较器
发表评论
-
hibernate Search
2010-10-15 10:09 1412hibernate Search 使用过lucene的人都 ... -
org.hibernate.LazyInitializationException: could not initialize proxy - no Sessi
2010-09-10 15:57 20251.设置里 lazy = "false" ... -
Hibernate数据检索策略
2010-08-09 08:52 1227Hibernate数据检索策略: Hiberna ... -
Java、hibernate、sql类型对照
2010-08-09 08:48 1506基本值类型: Java基本类型、对应的Hibernate映射 ... -
Hibernate事务隔离级别
2010-08-09 08:46 6274Hibernate事务隔离级别: 隔离级别 ... -
Hibernate数据检索策略
2010-08-06 15:58 1350Hibernate数据检索策略:Hibernate的数据检索策 ... -
生成model类的serialVersionUID
2010-06-25 16:36 1131生成model类的serialVersionUID: 在命令 ... -
spring 与 hibernate Annotation配置(entry)
2010-06-13 16:53 2044(5)TCompanyInfo.java import ... -
Hibernate的复杂用法HibernateCallback
2010-06-13 09:00 1143HibernateTemplate还提供一种更加灵活的方式来操 ... -
hibernate3与spring2零配置
2010-06-11 15:19 1416ssh除了xml配置之外,还可以用标注式配置: (1)sp ... -
hibernate3 annotation 的实例 3 (one to many)
2010-03-24 15:19 2108http://bigcat.easymorse.com/?p= ... -
hibernate annotation spring
2010-03-24 08:35 1099http://2625962-163-com.iteye.co ... -
hibernate3 annotation 的实例 2
2010-03-23 15:51 1817实例二:(主键sequence策 ... -
hibernate3 annotation的实例
2010-03-23 14:55 1999实例一:一个对象的增删改查: import java. ... -
query specified join fetching, but the owner of the fetched association
2010-03-04 09:57 1974错误原因分析: 首先看HQL语句: ... -
illegal attempt to dereference collection
2010-03-04 09:12 3702首先说一句:是版本的问题! 我写的hql为: from D ... -
查询hibernate 部分数据
2010-01-29 10:56 1410hibernate查出来人部分数据基本上是数组,有的时候需要对 ... -
解决hibernate中的lazy的问题
2010-01-28 11:38 1417<many-to-one name="TCu ... -
hibernate 批量添加
2009-12-29 13:37 2069public void createRolePermissio ... -
hibernate 常见错误
2009-12-24 12:52 9731.org.hibernate.LazyInitializat ...
相关推荐
在IT行业中,SSH(Struts、Spring、Hibernate)是一个经典的Java Web开发框架组合,其中Hibernate是专注于对象关系映射(ORM)的框架。...如果你对此感兴趣,可以继续关注后续的章节更新,深化对Hibernate的掌握。
《传智播客2016 Hibernate框架学习笔记》是一份详实的教程,旨在帮助初学者和进阶者深入理解和掌握Hibernate框架。...这些笔记不仅适合初学者,也为有经验的开发者提供了一个复习和深化Hibernate知识的良好资源。
Hibernate 是一个开源的对象关系映射(ORM)框架,它允许Java开发者将数据库操作与对象模型进行无缝集成。在Java世界中,它极大地...同时,结合《Hibernate.pdf》这份资料,可以进一步巩固和深化理解,提升实战能力。
【标题】"黑马49期Hibernate学习"是一个...学习者可以通过笔记巩固理论,通过视频理解实践,通过实战项目来检验和深化所学知识。对于想从事Java后端开发或提升数据库操作技能的人来说,这是一个非常有价值的学习资源。
5. 异步操作与事务管理:学习Hibernate的异步处理和事务控制,理解ACID属性在Hibernate中的应用。 【精通阶段】,将深入学习: 1. 性能优化:分析Hibernate性能瓶颈,学习如何通过批处理、懒加载、子查询优化等手段...
《Hibernate in Action...总的来说,通过分析《Hibernate in Action》第二版的源码,我们可以深化对Hibernate的理解,提升Java持久化开发技能,对于从事Java企业级应用开发的人员来说,这是一个非常有价值的学习资源。
**hibernate 3.3学习笔记** 在深入探讨Hibernate 3.3的学习笔记之前,首先需要理解Hibernate是什么。Hibernate是一个强大的开源Java持久化框架,它简化了数据库操作,允许开发者将精力集中在业务逻辑上而不是数据库...
总的来说,研究Hibernate Tool的源代码,不仅可以掌握Eclipse Plugin的开发技术,也能深化对Hibernate ORM的理解,同时还能学习到代码生成和模板引擎的实战经验。这是一次宝贵的旅程,有助于提升Java开发者的技能...
这些源码实例对于深化对Hibernate的理解,提高实际开发中的应用能力非常有帮助。通过阅读和运行这些代码,你可以更好地掌握Hibernate在实际项目中的应用,并能够解决在开发过程中遇到的相关问题。
【标签】中的"Y2Hibernate"进一步强调了这是第二年学习的Hibernate部分,意味着可能已经接触过基础的Java编程和数据库知识,现在正在深化对ORM工具的理解。"自己写的 内部测试 阶段测试"标签提示了这是一次自我评估...
Spring 和 Hibernate 是两个在 Java 开发领域中广泛使用的开源框架,它们分别专注于应用...通过阅读提供的参考资料,你可以逐步掌握这些知识,并在实践中不断深化理解,从而成为 Spring 和 Hibernate 的熟练开发者。
总之,《精通Hibernate》是一本全面覆盖Hibernate各个方面的教程,无论你是Java新手还是希望深化ORM理解的开发者,都能从中受益匪浅。通过学习这本书,你将能够熟练掌握Hibernate的使用,从而提高开发效率,降低...
**标题:** Hibernate 4 学习笔记 **概述:** Hibernate 4 是一个流行的Java对象关系映射(ORM)框架,它允许开发人员在Java应用中处理...如果你对某个部分有更深入的兴趣,可以进一步查阅相关文档或教程,深化学习。
总的来说,这些资料全面覆盖了Hibernate的基本使用、配置、查询以及实战技巧,无论是刚接触Hibernate的新手,还是希望深化理解的老手,都能从中受益。通过系统学习和实践,你将能够熟练运用Hibernate构建高效、稳定...
《Hibernate Quickly》是一本专注于Java领域中的Hibernate框架的入门书籍,由Patrick ...无论是对于想要学习数据库持久化技术的新手,还是希望深化对Hibernate理解的资深开发者,这本书都是一个不可多得的宝贵资源。
在学习Hibernate的过程中,源码分析是提高技术水平的关键步骤。通过阅读源码,我们可以了解到Hibernate如何将Java对象与数据库表进行映射,如何执行SQL语句,以及事务管理、缓存机制、查询优化等核心功能的实现原理...
描述中提到的"用.NET做的hibernate练习"进一步确认了这是一个学习或教学项目,旨在帮助开发者熟悉NHibernate在.NET中的工作方式,可能包括实体类的创建、配置文件的编写、数据库连接和会话管理等。 **hibernate知识...
总结,通过这个"hibernate框架实例",你可以学习到如何在Java项目中使用Hibernate进行数据库操作,理解其基本概念、API用法以及各种映射关系。这将大大提升你的项目开发效率,减少与数据库交互的繁琐工作。实践这个...
**Hibernate 源代码分析与学习指南** Hibernate 是一个开源的对象关系映射(ORM)框架,它极大地简化了 Java 应用程序与数据库之间的交互。本文将深入探讨 Hibernate 源代码,帮助初学者理解其核心概念,并提供相关...
《Hibernate源码解析(三)》这篇文章主要探讨了Hibernate框架的深入源码解析,这是对 Hibernate 框架理解的进一步深化。在本篇中,作者聚焦于几个关键的组件和机制,帮助读者理解 Hibernate 如何高效地管理和操作...