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这两文件名,你也不一定非得把配置文件放在Classes下, File file=new File("c:\\sample\\myhibernate.xml"); Configuration config=new Configuration().config(file);
3. session.Flush() 强制数据库立即同步,当用事务时,不必用flush,事务提交自动调用flush在session关闭时也会调用flush
4. Hibernate总是使用对象类型作为字段类型
5. XDoclet专门建立了hibernate doclet,就是在java代码上加上一些java docTag,后来再让XDoclet分析该java代码,生成映射文件;
6.HQL子句本身大小写无关,但是其中出现的类名和属性名必须注意大小写区分。
7.关系: Constrained : 约束,表明主控表的主键上是否存在一个外键(foreigh key)对其进行约束。
property-ref:关联类中用于与主控类相关联的属性名,默认为关联类的主键属性名
单向一对多需在一方配置,双向一对多需在双方进行配置
8.lazy=false:被动方的记录由hibernate负责记取,之后存放在主控方指定的Collection类型属性中
9. java.util.Set或net.sof.hibernate.collecton.Bag类型的Collection
10.重要:inverse:用于标识双向关联中的被动方一端。
inverse=false的一方(主控方)负责维护关联关系.默认值:false
11.batch-size:采用延迟加载特征时,一次读入的数据数昨。
12.一对多通过主控方更新(主控方为一方时)
user.getAddresses().add(addr);
session.save(user);//通过主控对象级联更新
13.在one-to-many 关系中,将many 一方设为主动方(inverse=false)将有助性能的改善。在一方设置关系时,inverse=true,即将主控权交给多方, 这样多方可主动从一方获得foreign key,然后一次insert即可完工。
addr.setUser(user);//设置关联的TUser对象
user.getAddresses().add(addr);
session.save(user);//级联更新
14.只有设为主控方的一方才关心(访问)对方的属性,被动方是不关心对方的属性的。
15.one-to-many与many-to-one节点的配置属性不同:
一对多关系多了lazy和inverse两个属性多对多节点属性:
column:中间映射表中,关联目标表的关联字段
class:类名,关联目标类
outer-join:是否使用外联接
注意:access是设置属性值的读取方式。
column是设置关联字段。
16.多对多,注意两方都要设置inverse和lazy,cascade只能设为insert-update
多对多关系中,由于关联关系是两张表相互引用,因此在保存关系状态时必须对双方同时保存。
group1.getRoles().add(role1); role1.getGroups().add(group1);
session.save(role1); session.save(group1);
17.关于vo和po vo经过hibernate容量处理,就变成了po(该vo的引用将被容器保存,并且在session关闭时flush,因此po如果再传到其它地方改变了,就危险了) vo和po相互转换:BeanUtils.copyProperties(anotherUser,user);
18.对于save操作而言,如果对象已经与Session相关联(即已经被加入Session的实体容器中),则无需进行具体的操作。因为之后的Session.flush过程中,Hibernate 会对此实体容器中的对象进行遍历,查找出发生变化的实体,生成并执行相应的update 语句。
19.如果我们采用了延迟加载机制,但希望在一些情况下,实现非延迟加 载时的功能,也就是说,我们希望在Session关闭后,依然允许操作user的addresses 属性 Hibernate.initialize方法可以通过强制加载关联对象实现这一功能: 这也正是我们为什么在编写POJO时,必须用JDK Collection接口(如Set,Map), 而非特定的JDK Collection实现类(如HashSet、HashMap)申明Collection属性的 原因。
20.事务:从sessionFactory获得session,其自动提交属性就已经关闭(AutoCommit=false),此时若执行了jdbc操作,如果不显式调用session.BeginTransaction(),是不会执行事务操作的。
jdbc transaction:基于同一个session(就是同一个connection)的事务;
jta transaction:跨session(跨connection)事务.
对于jta事务,有三种实现方法:
A。UserTransaction tx=new InitialContext().lookup("...");
tx.commit();
B. 使用hibernate封装的方法:(不推荐)
Transaction tx=session.beginTransaction();
tx.commit();
C. 使用ejb之sessionBean的事务技持方法,你只要在把需要在发布描述符中,把需要jta事务的方法声明为require即可
21.悲观锁,乐观锁: 乐观锁一般通过version来实现,注意version节点必须出现在id后。
22.Hibernate中,可以通过Criteria.setFirstResult和Criteria.setFetchSize方法设定分页范围。
Query接口中也提供了与其一致的方法,hibernate主要在dialect类中实现在这个功能。
23.cache
……
net.sf.ehcache.hibernate.Provider
还需对ecache本身进配置
之后在映射文件中指定各个映射实体的cache策略
....
....
***************************************************** Query.list()跟Query.iterate()的不同: 对于query.list()总是通过一条sql语句获取所有记录,然后将其读出,填入pojo返回; 但是query.iterate(),则是首先通过一条Select SQL 获取所有符合查询条件的记录的 id,再对这个id 集合进行循环操作,通过单独的Select SQL 取出每个id 所对应的记 录,之后填入POJO中返回。
也就是说,对于list 操作,需要一条SQL 完成。而对于iterate 操作,需要n+1 条SQL。,list方法将不会从Cache中读取数据。iterator却会。
24.ThreadLocal:它会为每个线程维护一个私有的变量空间。实际上, 其实现原理是在JVM 中维护一个Map,这个Map的key 就是当前的线程对象,而value则是 线程通过ThreadLocal.set方法保存的对象实例。当线程调用ThreadLocal.get方法时, ThreadLocal会根据当前线程对象的引用,取出Map中对应的对象返回。
这样,ThreadLocal通过以各个线程对象的引用作为区分,从而将不同线程的变量隔离开来。
25.Hibernate官方开发手册标准示例:
public class HibernateUtil { private static SessionFactory sessionFactory;
static { try { // Create the SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
} catch (HibernateException ex) { throw new RuntimeException( "Configuration problem: " + ex.getMessage(), ex );
} } public static final ThreadLocal session = new ThreadLocal();
public static Session currentSession() throws HibernateException { Session s = (Session) session.get();
// Open a new Session, if this Thread has none yet if (s == null) { s = sessionFactory.openSession();
session.set(s);
} return s;
} public static void closeSession() throws HibernateException { Session s = (Session) session.get();
session.set(null);
if (s != null) s.close();
} }
26.通过filter实现session的重用:
public class PersistenceFilter implements Filter { protected static ThreadLocal hibernateHolder = new ThreadLocal();
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { hibernateHolder.set(getSession());
try { …… chain.doFilter(request, response);
…… } finally { Session sess = (Session)hibernateHolder.get();
if (sess != null) { hibernateHolder.set(null);
try { sess.close(); } catch (HibernateException ex) { throw new ServletException(ex);
} } } } ……}
分享到:
相关推荐
### Hibernate配置要点详谈 #### 一、配置文件与配置方式 在Hibernate中,有两种主要的配置文件形式:`hibernate.cfg.xml` 和 `hibernate.properties`。 1. **`hibernate.cfg.xml`**: - 这种配置文件通常包含...
本教程将详细讲解如何在Java项目中配置和使用Hibernate,包括在普通Java工程和Maven工程中的配置实例。 首先,我们需要了解Hibernate的核心概念。Hibernate是一个开源的ORM框架,它可以将Java类与数据库表进行映射...
Manning出版 Java Persistence With Hibernate 第二版 清晰pdf Hibernate, an open source project that is almost 15 years old. In a recent poll, Hibernate was among the top five tools used by many Java ...
hibernate配置文件 里面提供了连接数据库 数据库使用的方言 是否打印SQL语句 sql语句的格式 以及对象-关系映射文件的地址等
《Java Persistence with Hibernate》是一本深入探讨Java领域对象关系映射(ORM)框架Hibernate的专业书籍。这本书详尽地阐述了如何使用Hibernate进行数据持久化,从而帮助开发者在Java应用程序中高效地管理和操作...
Hibernate,作为一个强大的对象关系映射(ORM)框架,是Java开发者必备的技能之一。Hibernate3是其历史版本中的一个重要里程碑,它在Hibernate2的基础上进行了许多改进和优化,使得数据库操作更为便捷,提高了开发...
Hibernate作为Java世界中最流行的持久层框架之一,在对象关系映射(ORM)领域扮演着极其重要的角色。它不仅简化了数据库操作的复杂性,还为开发者提供了一种更为高效、简洁的方式来管理应用程序中的数据持久化问题。...
JAVA struts+hibernate实现的网络购物系统JAVA struts+hibernate实现的网络购物系统JAVA struts+hibernate实现的网络购物系统JAVA struts+hibernate实现的网络购物系统JAVA struts+hibernate实现的网络购物系统JAVA ...
总结,Java Persistence with Hibernate是Java开发者必备的技能之一,它通过丰富的API和灵活的配置选项,使得数据库操作变得简单且高效。通过学习和实践,我们可以更好地理解和运用Hibernate,提升开发效率,打造出...
总的来说,《Java Persistence with Hibernate》是一本深入浅出的教程,适合Java开发者学习和掌握Hibernate框架,提升数据库操作和对象关系映射的能力。通过阅读本书,你可以更好地理解ORM的核心理念,熟练掌握...
java persistence with hibernate 第二部分压缩包
【Hibernate 概述】 Hibernate 是一个流行的开源 Java ORM(对象关系映射)框架...学习 Hibernate,理解对象模型与关系数据库模型的差异,以及如何在 Hibernate 中进行映射,对于 Java 开发者来说是必不可少的知识点。
Java Persistence with Hibernate(2nd) 英文无水印pdf 第2版 pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权...
### Java之Hibernate和Spring技术难点及其要点总结 #### Hibernate与Spring技术概述 在Java开发领域,Hibernate和Spring作为两个非常重要的框架,对于提高应用程序的开发效率、降低维护成本具有不可替代的作用。...
标题中的“memcache也spring,hibernate的配置”指的是如何在Java开发环境中,结合Memcached缓存系统、Spring框架和Hibernate持久化框架进行集成配置。Memcached是一种高性能的分布式内存对象缓存系统,用于加速动态...
关于工具的使用,Hibernate提供了hibernate.cfg.xml配置文件或基于Java的配置方式来设置数据库连接参数、实体类扫描路径等。同时,它还提供了SessionFactory、Session、Transaction等接口,供开发者进行数据库操作。...
在开发Java Web应用程序时,使用Hibernate作为持久层框架可以极大地简化数据库操作。MyEclipse作为一款强大的集成开发环境,...同时,这也为我们提供了学习和理解Hibernate配置文件、Java Bean类和映射文件结构的机会。
**Hibernate基本配置演示** 在Java开发中,Hibernate是一款强大的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者能够用Java对象来处理数据。这篇教程将深入讲解Hibernate的基本配置过程,确保你能顺利...