<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 笨笨 閱讀(432) 評論(0)  編輯  收藏 所屬分類: J2EE 、HibernateAndSpring 、ALL
    主站蜘蛛池模板: 0588影视手机免费看片| 久久一区二区免费播放| 精品国产sm捆绑最大网免费站| 国产亚洲精品一品区99热| 天堂在线免费观看| 亚洲精品无码久久一线| 国产精成人品日日拍夜夜免费| 亚洲gv白嫩小受在线观看| 亚洲精品免费在线观看| 国产亚洲福利精品一区| 中文字幕成人免费高清在线视频| 久久久久国产亚洲AV麻豆| 亚洲免费视频一区二区三区| 国产亚洲精品成人AA片新蒲金| 国产又黄又爽胸又大免费视频| 亚洲AV中文无码乱人伦下载| 免费看男人j放进女人j免费看| 在线观看亚洲一区二区| 无码一区二区三区AV免费| 色欲aⅴ亚洲情无码AV蜜桃| 亚洲无码日韩精品第一页| 男女午夜24式免费视频| 亚洲大尺码专区影院| 日韩在线免费播放| 一级女人18片毛片免费视频| 水蜜桃亚洲一二三四在线| 中文字幕无码不卡免费视频| 黄色a三级三级三级免费看| 亚洲无码在线播放| 四虎永久在线精品免费观看视频| 亚洲国产av玩弄放荡人妇| 国产午夜亚洲精品国产成人小说| 91香蕉国产线在线观看免费| 中文无码亚洲精品字幕| 国产亚洲精品无码拍拍拍色欲| 最近2019年免费中文字幕高清 | 久久国产亚洲高清观看| 妞干网在线免费观看| 一个人看的www免费高清| 亚洲女人初试黑人巨高清| 免费在线视频一区|