stoneWindow 原创 更新:2005-12-13 10:59:37 版本: 1.0
...
什么时候需要重定义equals和hashCode方法(EqualsBuilder,HashCodeBuilder):
1,特定领域中的逻辑规则;2,Java Collection通过hashCode/equals方法判定两个对象是否相等,set集合中不允许出现重复的元素;3,定义了基于实体类属性的复合主键后,Hibernate要求复合主键类实现equals和hashCode方法,以作为不同数据之间识别的标志。
Hiberante中缓存发挥作用的情况:
1,通过id加载数据时
session.load();和session.iterate();--->类似一个load循环。
2,延迟加 ...
XXXX项目缓存方案总结
XXXX项目是目前在实际工作中正在做的事情,该项目是一个大型系统的内容管理内核,负责最核心的meta data的集中管理,性能有较高的要求,设计初期就要求能够支持cluster。项目使用hibernate 3.2,针对开发过程中对于各种缓存的不同看法,撰写了本文。重点在于澄清一些hibernate的缓存细节,纠正一些错误的缓存用法。
一、hibernate的二级缓存
如果开启了二级缓存,hibernate在执行任何一次查询的之后,都会把得到的结果集放到缓存中,缓存结构可以看作是一个hash table,key是数据库记录的id,va ...
作者:IT168 飞飞 2006-10-17
【IT168 技术文档】摘要:很长时间以来,笔者就想写写关于Hibernate缓存的一些文字,今天有这个不可多得的机会让我谈谈对它的一些想法。Hibernate缓存机制对Hibernate的性能发挥一直处于一个极其重要的作用,它是持久层性能提升的关键。对很多学习或使用Hibernate的朋友一来,还不一定真正的了解或使用她。现在大家就随我一起看看揭开她神秘面纱那张未知的“脸”。
个人备注:二级缓存与查询缓存---二级缓存-查询关联的多个对象中,只要有对象被缓存性能就会提高,而查询缓存只有关联的对象都被缓存性能才能提高,不然则和没有使用查询缓 ...
在没有使用Spring提供的Open Session In View情况下,因需要在service(or Dao)层里把session关闭,所以lazy loading 为true的话,要在应用层内把关系集合都初始化,如 company.getEmployees(),否则Hibernate抛session already closed Exception; Open Session In View提供了一种简便的方法,较好地解决了lazy loading问题.
它有两种配置方式OpenSessionInViewInterceptor和OpenSessionInViewFilte ...
10:42PM Apr 06, 2005 in category Java by Karl Baum
Hibernate and Lazy Initialization
Hibernate object relational mapping offers both lazy and non-lazy modes of object initialization. Non-lazy initialization retrieves an object and all of its related objects at load time. This can result in hundred ...
Spring 与 Hibernate 的延迟加载和 Dao 模式
Hibernate 与延迟加载:
Hibernate 对象关系映射提供延迟的与非延迟的对象初始化。非延迟加载在读取一个对象的时候会将与这个对象所有相关的其他对象一起读取出来。这有时会导致成百的(如果不是成千的话) select 语句在读取对象的时候执行。这个问题有时出现在使用双向关系的时候,经常会导致整个数据库都在初始化的阶段被读出来了。当然,你可以不厌其烦地检查每一个对象与其他对象的关系,并把那些最昂贵的删除,但是到最后,我们可能会因此失去了本想在 ORM 工具中获得的便利。
一个明显的解决方法是使用 Hibe ...
1, java.lang.UnsupportedOperationException: The user must supply a JDBC connection
hibernate.properties vs. hibernate.cfg.xml is this:
if you use :
SessionFactory sf=new Configuration().buildSessionFactory();
then this will use the hibernate.properties
if you use:
SessionFactory sf=new Confi ...
1.两种配置文件:
A.hibernate.cfg.xml 和 B.hibernate.properties
A中可含映射文件的配置,而B中hard codes加映射文件。
A。Configuration config=new Configuration().config();
B. Configuration config=new Configuration();
config.addClass(TUser.class);
2.你不必一定用hibernate.cfg.xml或hibernate.properties这两文件名,
...
Hibernate基础知识,谈到这里,首先最重要的是应该理解ORM,ORM是什么呢?3个单词的缩 写,Object-Relation Mapping,既对象-关系映射的意思.这是一种模式,这种模式在单个组件中负责说有实例业务对象的持久化,封装了数据库访问的细节,这就是 Hibernate的核心原理.ORC解决主要的问题就是对象-关系映射.因为项目的业务逻辑模型是面向对象的,而关系型数据模型是面向关系的,所以 Hibernate把一个持久化的类和数据库中的一张表对应,类的每一个实例对应这个表的一条记录.类的每一个属性,对应这表里的一个字段.这样就把一个 对象和一个关系型数据表映射在了一起,这就是 ...
非常感谢最近发布的Hibernate 3中的XML持久性特性,Java开发者现在拥有了一个框架组件,它为易于实现的对象关系(OR)和XML持久性提供了高效的和一致的方法。
Hibernate的易用性、高性能和对象关系持久性等高级特性给IT界带来了很大的惊喜。Hibernate的最新版本(版本3,3月29日发布的)给产品API带来了一个重要的新特性:XML持久性。有了Hibernate 3之后,Java应用程序开发者可以轻易地把XML文档合并到关系型数据库中。
这个新特性应该明确地告诉已有的Hibernate开发者,因为它也遵循POJO(纯的旧Java对象)相同的一致性方法,需要学习 ...
spring中对hibernate的支持是非常强大的,从一个简单的例子就看得出来,从这个例子中我们还将对所谓的轻量级容器做一些讨论。
首先需要配置数据源,通常我们有两种方式获得Connection,一是自己编写代码获得连接,二是从JNDI环境中得到DataSource,然后产生一个Connection。无论怎样,既然是spring下面的对象,就应该注册到配置文件中。假设我们需要一个连接mysql下面一个叫做examer的数据库,手动方式的配置是:
<bean id="dataSource" class="o ...
延迟加载:
延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作。在Hibernate中提供了对实体对象的延迟加载以及对集合的延迟加载,另外在Hibernate3中还提供了对属性的延迟加载。下面我们就分别介绍这些种类的延迟加载的细节。
A、实体对象的延迟加载:
如果想对实体对象使用延迟加载,必须要在实体的映射配置文件中进行相应的配置,如下所示:
<hibernate-mapping>
<class name=”com.neusoft.entity.User” table=”user” lazy=”true”>
...
在做swing项目和bs的web项目时,有很大不同,由于在Swing中,我可以将一个对象抽取后,送到页面展示层,而后,又从中将那个对象去回来。而在web应用中,基于http无状态协议,只能将对象的id,或者是将对象送到展示层,通过再次提交,将对象的信息传送到服务器。
在web应用中,利用hibernate, 有两种方法可以实现数据更新。
1. 通过页面传送回的信息,构建更新对象,直接调用update()去更新对象。
2. 通过对象id,先load对应的持久化对象,然后,将页面传送回的信息赋值到load的对象上去。
考虑到对象之间的关联关系的维护,和以后可能还会添加关联关系,第二 ...
1、针对oracle数据库而言,Fetch Size 是设定JDBC的Statement读取数据的时候每次从数据库中取出的记录条数,一般设置为30、50、100。Oracle数据库的JDBC驱动默认的Fetch Size=15,设置Fetch Size设置为:30、50,性能会有明显提升,如果继续增大,超出100,性能提升不明显,反而会消耗内存。
即在hibernate配制文件中进行配制:
1 <property name="hibernateProperties">
2 ...
1,Lifecyle 与 Validatable
Hibernate通过Lifecyle,Validatable接口制定了实体对象CRUD过程中的回调(CallBack)方式。
public class TUser implements Serializable,Lifecyle{
public boolean onSave(Session s) throws CallBackException{
...
return false; //insert操作正常执行
...
}
public boolean onUpdate(Session s) throw ...
1,数据加载
1),Session.get/load
区别:(1),未发现符合条件的记录:get-->null,load-->ObjectNotFoundException。
(2),load可返回实体的代理类实例,get永远直接返回实体类。
(3),load-->内部缓存-->二级缓存-->SQL(DB),get-->内部缓存-->SQL(DB)。
Session加载实体对象时经过的过程:
内部缓存(查找数据)-->NonExists(查找查询条件)-->第二级缓存(load方法)-->Select SQL(DB)-->根据Result创建对应的数据对象-->将其数据对象纳入当前Sess ...
一、实体对象的生命周期
1,实体对象的三种状态(生命周期中的三种状态)
(1),Transient:在内存中的自由存在,与数据库中的记录无关。
public void methodA{
TUser user = new TUser();
user.setName("Emma"); ---user与数据库中的记录没有关联。
}
(2),Persistent:处于由Hibernate框架所管理的状态。实体对象的引用被纳入Hibernate实体容器中加以管理。
TUser user = new TUser();
TUser anotherUser = new ...
一,实体粒度设计
fine-grained object model
grained object model(细粒度模型):就是将原本业务模型中的对象加以细分,从而得到更加精细的对象模型(也就是划分出更多的对象)。对于Hibernate主要是针对实体类设计的对象细分。
对象的细分目的:
1,面向设计的粒度细分:通过对象细化,实现更加清晰的系统逻辑。
2,面向性能的粒度细分:针对业务逻辑,通过合理的细粒度对象,提高系统的能耗比(性能/资源消耗)。
(一),面向设计粒度细分
例如:配送单包含信息---订购客户姓名,所订购的货物品名、数量,配送单编号、配送地址、配送时间。
设计方法1,通过 ...
基础语义
Configuration:负责管理Hibernate的配置信息--加载hibernate.cfg.xml文件至内存,作为后续操作基础配置--获取SessionFactory。
Configuration config = new Configuration().configure();
Configuration config = new Configuration().configure("myHibernate.cfg.xml");
SessionFactory:负责创建Session实例.--重用策略--线程安全设计--一个应用中针对一个数 ...
最近在项目中使用 Spring 和 Hibernate 进行开发,有感于 Criteria 比较好用,在查询方法设计上可以灵活的根据 Criteria 的特点来方便地进行查询条件的组装。所以现在对 Hibernate 的 Criteria 深入研究一下。《 Hibernate Reference 》及网上其它一些资料对 Criteria 已经做了很多介绍。本文主要是从 Criteria 的结构入手来进行分析。
如图 1 。 Hibernate 设计了 CriteriaSpecification 作为 Criteria ...
本文依照HIBERNATE帮助文档,一些网络书籍及项目经验整理而成,只提供要点和思路,具体做法可以留言探讨,或是找一些更详细更有针对性的资料。
初用HIBERNATE的人也许都遇到过性能问题,实现同一功能,用HIBERNATE与用JDBC性能相差十几倍很正常,如果不及早调整,很可能影响整个项目的进度。
大体上,对于HIBERNATE性能调优的主要考虑点如下:
Ø 数据库设计调整
Ø HQL优化
Ø API的正确使用(如根据不同的业务类型选用不同的集合及查询API)
Ø 主配置参数(日志,查询缓存,f ...
前言
以下所有描述以选课系统这个案例来说明。在一个选课系统中,基本的对象有课题(Course)、教师(Teacher)和学生(Student)。
一、一对一关联(有共享主键关联和惟一外键关联两种)
1、共享主键关联
比如课题是由教师去任教,没有教师就没有课题,这样课题就可以完全由教师来决定。
Java示例代码如下:
publicclass Course {
private Long id;
private String ...
Hibernate在初始化阶段会根据映射文件的信息,为所有的持久化类预定义insert语句,update语句where ID,delete语句where ID,select语句where ID,这里所说的语句就是标准的SQL增,删,改,查.语句,参数用?代表JDBC PreparedStatement中的参数,这里就不举例了.这些SQL语句都存放在SessionFactory的缓存中,当执行Session的save(),update(),delete(),load()方法时,将会从SessionFactory的缓存中读取这些预定义的SQL语句,在把具体的参数值绑定到SQL语句中,这 ...
insert方法
public void insert(Object o){
Session session = HibernateSessionFactory.currentSession();
Transaction t = session.beginTransaction();
session.save(o);
t.commit();
HibernateSessionFactor ...
Hibernate有两种配置文件格式,一种是XML,默认为hibernate.cfg.xml,一种是properties,默认为hibernate.properties
不同的配置文件,对Hibernate的初始化方法是不一样的
比如,如果采用properties文件作为配置文件
那么初始化的代码大致为
Configuration config = new Configuration();
config.addClass(myclass.class);
如果配置文件为XML,则
Configuration config = new Configuration().config() ...
Hibernate 是什么?从不同角度的解释:
1、它是连接 Java 应用程序和关系数据库的中间件。
2、它对 JDBC API 进行了封装,负责Java对象的持久化。
3、在分层的软件架构中它位于持久化层,封装了所有数据访问细节,使业务罗基层可以专注于实现业务逻辑。
4、它是一种 ORM(Object-Relation Mapping 对象-关系映射)工具,能够建立面向对象的域模型和关系模型的映射。
&nb ...
HQL:Hibernate Query Language,完整的HQL语法结构如下:
[select/update/delete...] [from...] [where] [group by... [having]] [order by...]
结构上看上去很像SQL,但HQL是非常有益使得被设计为完全面向对象的查询,它可以理解如继承、多态和关联之类的概念。
实体查询(表)
String hql = "from TUser"; //select ... from T_User;
Query query = session.createQuery(hq ...
- 浏览: 63513 次
- 性别:

- 来自: Da Lian

- 详细资料
搜索本博客
最新评论
-
Oracle的rownum原理和使用
照这么看来,rownum 就是一个游标,而且只能前进,不能后退的游标啦```~~ ...
-- by lovinchan -
游戏,平时彻底地放弃
深有同感 ,一起勉励自己吧
-- by hyj1254 -
避免在Java中使用Checked ...
的确是这样,在某些情况下,我的确觉得checked Exception用起来很麻 ...
-- by ivonxiao -
Documentum notes accumul ...
最近也在搞Documentum,觉得这个内容管理器的功能确实比较强大,但是界面也 ...
-- by woshifeng9th -
Oracle的rownum原理和使用
order by name 如果name是pk或有index ,查询出来的row ...
-- by seasar






评论排行榜