动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
电脑书籍下载:程序设计书籍 | 数据库教程书籍 | 平面与多媒体书籍 | 网络通讯书籍 | 系统管理书籍 | 网络安全书籍 | 认证考试书籍
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Java教程 ]的信息



本月文章推荐
.J2ME Mobile 3D入门教程系列文章.
.8条用于分布式计算的架构技巧.
.技术分析:将Web站点转换为Web服务.
.一针见血谈谈面向对象的思维方法.
.Jakarta Struts应用的七个经验(.
.客户机/服务器系统.
.Java初学者---Java的学习路径(全.
.return 语句.
.在Eclipse 3.1体验J2SE 5.0新特性.
.Java中运行其它程序方法的实例详.
.jboss配置mysql数据库连接池.
.软件开发的“简单”艺术—有感于.
.Java对象的强、软、弱和虚引用.
.使用Java Swing 创建一个XML编辑.
.再谈通过Java执行POST操作.
.面向对象编程之:Java collectio.
.使用JSF和MyFaces实现文件上载.
.Hibernate二级缓存攻略.
.EJB 3.0是Hibernate的克隆吗?.
.课程介绍(8):SL-425 体系结构及设.

Java学习之hibernate配置要点详谈

发表日期:2008-1-5 |



  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);
  } } } } ……}
上一篇:weblogic中将SessionFactory配置为JNDI 人气:516
下一篇:开源框架Hibernate 3 的Formulas(图) 人气:367
浏览全部Java的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-7-24 Sablog-X v2.0 预览版
2008-7-24 帝国备份王EmpireBak 2008 正式版
2008-7-24 网趣网上购物系统时尚版 v8.2
2008-7-24 纵横B2B电子商务系统XYECS!B2B v
2008-7-24 e路小说小偷 v1.2.0723
2008-7-24 凌风美女图片站程序 v2.2
2008-7-24 TOM15电影收索程序
2008-7-24 清风信息自动采集生成系统 v1.0
2008-7-24 QQ邮箱编辑器 v1.0 (小小菜刀ASP
2008-7-19 UltraEdit 简体中文增强版 14.10
2008-7-19 CentOS 5.2 i386 LiveCD
2008-7-19 Snapture多功能相机 v1.4
2008-7-19 iAcces中文输入法 v1.0Build016
2008-7-19 Cookbook烹饪秘籍 v2.5
2008-7-19 苹果专用DVD转换工具 v1.1.59汉化
2008-7-19 Modem修复软件ZiPhone修改版04.0
2008-7-19 AgileMessenger即时通讯工具美化
2008-7-19 Sketches画图软件 v0.7b6破解版


  发表评论
姓 名: 验证码:
内 容:
[ 汉字翻译拼音 ] [ 广告代码 ] [ 符号对照表 ] [ 进制转换 ] [ 经典小工具 ] [ 个税计算 ] [ 汉字简繁转换 ] [ 普通单位换算 ] [ 公制单位换算 ]
[ 生辰老黄历 ] [ 国内电话区号 ] [ 国家代码与域名缩写 ] [ 文字加密解密 ] [ 健康查询 ] [ 万年历 ] [ 手机号码查询 ] [ ip搜索 ] [ Google PR查询 ]
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵