<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    kapok

    垃圾桶,嘿嘿,我藏的這么深你們還能找到啊,真牛!

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      455 隨筆 :: 0 文章 :: 76 評論 :: 0 Trackbacks

    http://blog.ideoplex.com/software/2003/12/11.html

    Adding a Hibern8IDE browser to your Hibernate Project

    The Hibern8 IDE is a quick'n'dirty interactive Hibernate Query Language (HQL) tool. And while it's not really an IDE, it's a pretty slick way of viewing the contents of your persistent Hibernate data store. There are basically two ways of opening up your data store with Hibern8IDE: you can interactively add hibernate properties and configuration files or you can programmatically start Hibern8IDE with a hibenate configuration object. Since I hate to constantly repeat myself, I opted for the programmatic option.

    If you've been following my series on Hibernate, then you know that I've been keeping all my configuration files in the cfg directory tree. So I decided to simply traverse the cfg directory tree, adding all .hbm.xml files to a configuration object before passing the configuration object on to Hibern8IDE. And since traversing a directory is a pretty common operation, I decided to implement a general solution consisting of a simple TreeWalker class and a TreeAction interface.

    14 May 04: Max Andersen from the Hibernate team comments that the load order of .hbm.xml files is important when a subclass or joined-subclass is defined in a separate file from the parent. If the parent is defined in parent.hbm.xml and the child is defined in child.hbm.xml, then parent.hbm.xml must be loaded before child.hbm.xml.

    package util; 

    public interface TreeAction { public void handle( java.io.File f ); }
    package util;

    import java.io.File;

    public class TreeWalker {

    public void walk ( TreeAction actor, File root ) { if ( root.exists() ) { if ( root.isDirectory() ) { File[] files = root.listFiles();

    for ( int i=0 ; i<files.length ; ++i ) { if ( files[i].isDirectory() ) { this.walk( actor, files[i] ); } else if ( files[i].isFile() ) { actor.handle( files[i] ); } } } else if ( root.isFile() ) { actor.handle( root ); } } } }

    The top level Ide class treats each command line argument as a configuration root directory It contains a static inner class Action implementing TreeAction that adds each .hbm.xml file to the hibernate configuration. And we hand the configuration object to Hibern8IDE once all the configuration directories have been traversed.

    Note that static inner class Action has to catch the hibernate MappingException to match the TreeAction interface. After catching the MappingException, we use it to create a RuntimeException. This trick of wrapping checked exceptions in a RuntimeException comes courtesy of Tim Bray. This is an appropriate response because our only other choice is to ignore it entirely.

    import java.io.File;

    import net.sf.hibernate.cfg.Configuration; import net.sf.hibernate.MappingException; import net.sf.hibernate.HibernateException;

    import net.sf.hibern8ide.Hibern8IDE;

    import util.*;

    public class Ide {

    static class Action implements TreeAction { private Configuration config;

    public Action ( Configuration aConfig ) { config = aConfig; }

    public void handle ( File f ) { String name = f.toString(); if ( name.endsWith( ".hbm.xml" ) ) { try { config.addFile( f ); } catch ( MappingException e ) { throw new RuntimeException( e ); } } } }

    public static void main ( String[] args ) throws MappingException, HibernateException { Configuration cfg = new Configuration(); Action actor = new Action( cfg ); TreeWalker walker = new TreeWalker();

    for ( int i=0 ; i<args.length ; ++i ) { File f = new File( args[i] ); walker.walk( actor,f ); }

    Hibern8IDE.startWith( cfg ); } }

    Finally, we add a new ide action to our build file (other minor buildfile changes not shown here). The single command line argument references our configuration directory.

      ...
      <target name="ide" depends="compile,setup-run">
        <java classname="Ide"
              fork="true">
          <classpath refid="classpath.ide" />
          <arg value="${cfg-dir}" />
          <sysproperty key="log4j.configuration" value="${LOG4J_OUT}" />
        </java>
      </target>
      ...
    

    Now we can launch the Hibern8IDE query tool by simply typing "ant ide". Here's the source for adding a Hibern8IDE query tool to your Hibernate project..


    Disclaimer: I don't claim to be an expert on hibernate. Please send comments and corrections.

    posted on 2005-05-24 15:49 笨笨 閱讀(422) 評論(0)  編輯  收藏 所屬分類: J2EE 、HibernateAndSpring 、ALL
    主站蜘蛛池模板: 免费电视剧在线观看| 青草草色A免费观看在线| 免费乱码中文字幕网站| 亚洲人成77777在线播放网站不卡| 日韩人妻无码精品久久免费一 | 亚洲色成人网站WWW永久| 免费中文字幕视频| 亚洲男人的天堂在线va拉文| 黄色网址免费在线| 亚洲一级Av无码毛片久久精品| free哆拍拍免费永久视频| 国产专区一va亚洲v天堂| 2022免费国产精品福利在线| 亚洲午夜未满十八勿入网站2| 99久久99这里只有免费的精品| 国产亚洲精久久久久久无码77777| 久久www免费人成看国产片| 亚洲午夜福利在线观看| 美女视频黄的免费视频网页 | 亚洲av成人一区二区三区| 成人无码区免费A片视频WWW | selaoban在线视频免费精品| 国产AV无码专区亚洲AWWW| 色播在线永久免费视频网站| 亚洲电影一区二区三区| 一二三四免费观看在线视频中文版| 亚洲人成网站色7799| 四虎影库久免费视频| 女同免费毛片在线播放| 亚洲国产精品久久久久秋霞影院| 欧美日韩国产免费一区二区三区 | 亚洲国产综合专区电影在线| 美女内射毛片在线看免费人动物| 亚洲国产日韩a在线播放| www.亚洲色图| 色欲色香天天天综合网站免费| 亚洲最大无码中文字幕| 爱情岛论坛网亚洲品质自拍| 中文字幕免费在线| 成人久久久观看免费毛片| 亚洲视频一区调教|