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

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

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

    kapok

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

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      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 笨笨 閱讀(423) 評論(0)  編輯  收藏 所屬分類: J2EEHibernateAndSpringALL
    主站蜘蛛池模板: 美女视频黄a视频全免费网站一区| 亚洲国产精品乱码一区二区| 日韩中文字幕免费视频| 免费人成网站在线观看不卡| 最近中文字幕mv免费高清在线 | 性做久久久久久免费观看| 精品剧情v国产在免费线观看| 天天操夜夜操免费视频| 亚洲综合色区在线观看| 亚洲男人的天堂在线播放| 亚洲一区精彩视频| 日本永久免费a∨在线视频| 最近中文字幕高清免费中文字幕mv| 亚洲国产成人私人影院| 无码国产精品一区二区免费式芒果 | 午夜不卡久久精品无码免费| 亚洲AV日韩AV永久无码久久| 特级av毛片免费观看| 亚洲欧洲自拍拍偷精品 美利坚| 亚洲AV无码精品蜜桃| 99视频免费在线观看| 无码中文在线二区免费| 亚洲人成无码网站在线观看| 四虎国产成人永久精品免费| 亚洲男女一区二区三区| 丝袜捆绑调教视频免费区| 尤物永久免费AV无码网站| 久久久久亚洲av无码专区喷水| 国产A∨免费精品视频| 成年女人免费视频播放体验区| 亚洲精品视频在线| 999国内精品永久免费视频| 亚洲小说区图片区另类春色| 亚洲精品久久无码| 四虎精品视频在线永久免费观看| 国产亚洲精品成人a v小说| 日本亚洲高清乱码中文在线观看 | 免费的涩涩视频在线播放| 国产亚洲高清在线精品不卡 | 欧洲精品成人免费视频在线观看| 亚洲av无码无在线观看红杏|