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

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

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

    My-java-spark

    BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
      5 Posts :: 0 Stories :: 4 Comments :: 0 Trackbacks

           Hibernate的動(dòng)態(tài)模型為我們動(dòng)態(tài)改動(dòng)表結(jié)構(gòu)帶來了方便, 個(gè)人認(rèn)為這一點(diǎn)非常有價(jià)值, 現(xiàn)在的企業(yè)級(jí)應(yīng)用系統(tǒng)越來越強(qiáng)調(diào)用戶可定制性, hibernate的這一點(diǎn)使用戶自定義字段或自定義表成為可能 .
    關(guān)于動(dòng)態(tài)模型, 我還是把hibernate自帶的測試用例貼到這里, 用以備忘.

    java代碼:

    //$Id: DynamicClassTest.java,v 1.4 2005/03/06 16:31:24 oneovthafew Exp $
    package org.hibernate.test.dynamic;

    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;

    import junit.framework.Test;
    import junit.framework.TestSuite;

    import org.hibernate.EntityMode;
    import org.hibernate.Hibernate;
    import org.hibernate.Session;
    import org.hibernate.Transaction;
    import org.hibernate.cfg.Configuration;
    import org.hibernate.cfg.Environment;
    import org.hibernate.test.TestCase;

    /**
     * @author Gavin King
     */
    public class DynamicClassTest extends TestCase {
     
     public DynamicClassTest(String str) {
      super(str);
     }

     protected void configure(Configuration cfg) {
      cfg.setProperty(Environment.DEFAULT_ENTITY_MODE, EntityMode.MAP.toString());
     }

     public void testLazyDynamicClass() {
      Session s = openSession();
      assertTrue( "Incorrectly handled default_entity_mode", s.getEntityMode() == EntityMode.MAP );
      Session other = s.getSession( EntityMode.MAP );
      assertEquals( "openSession() using same entity-mode returned new session", s, other );

      other = s.getSession( EntityMode.POJO );
      other.close();
      assertTrue( !other.isOpen() );
      assertTrue( other.isConnected() );  // because it is linked to the "root" session's connection

      s.close();

      s = openSession();
      Transaction t = s.beginTransaction();

      Map cars = new HashMap();
      cars.put("description", "Cars");
      Map monaro = new HashMap();
      monaro.put("productLine", cars);
      monaro.put("name", "monaro");
      monaro.put("description", "Holden Monaro");
      Map hsv = new HashMap();
      hsv.put("productLine", cars);
      hsv.put("name", "hsv");
      hsv.put("description", "Holden Commodore HSV");
      List models = new ArrayList();
      cars.put("models", models);
      models.add(hsv);
      models.add(monaro);
      s.save("ProductLine", cars);
      t.commit();
      s.close();

      s = openSession();
      t = s.beginTransaction();
      
      cars = (Map) s.createQuery("from ProductLine pl order by pl.description").uniqueResult();
      models = (List) cars.get("models");
      assertFalse( Hibernate.isInitialized(models) );
      assertEquals( models.size(), 2);
      assertTrue( Hibernate.isInitialized(models) );
      
      s.clear();
      
      List list = s.createQuery("from Model m").list();
      for ( Iterator i=list.iterator(); i.hasNext(); ) {
       assertFalse( Hibernate.isInitialized( ( (Map) i.next() ).get("productLine") ) );
      }
      Map model = (Map) list.get(0);
      assertTrue( ( (List) ( (Map) model.get("productLine") ).get("models") ).contains(model) );
      s.clear();
      
      t.commit();
      s.close();

      s = openSession();
      t = s.beginTransaction();
      cars = (Map) s.createQuery("from ProductLine pl order by pl.description").uniqueResult();
      s.delete(cars);
      t.commit();
      s.close();
     }


     protected String[] getMappings() {
      return new String[] { "dynamic/ProductLine.hbm.xml" };
     }

     public static Test suite() {
      return new TestSuite(DynamicClassTest.class);
     }

    }

    配置文件:

    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC
     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
     "

    <hibernate-mapping>

    <!--

      This mapping demonstrates "dynamic" entities.
        
    -->

     <class entity-name="ProductLine">

         <id name="id"
          column="productId"
          length="32"
          type="string">
          <generator class="uuid.hex"/>
         </id>

         <property name="description"
          not-null="true"
          length="200"
          type="string"/>

         <!-- don't use sets for associations, unless you want stack overflows! -->
         <!--這一點(diǎn)要特別小心, 我剛開始做試驗(yàn)的時(shí)候用的就是Set, 結(jié)果拋出 stack overflows異常, 害的我兩個(gè)小時(shí)搞不定, 最后還是看了這個(gè)test, 才知道用這樣的限制-->

         <bag name="models"
           cascade="all"
           inverse="true">
          <key column="productId"/>
          <one-to-many class="Model"/>
         </bag>

     </class>

        <class entity-name="Model">

         <id name="id"
          column="modelId"
          length="32"
          type="string">
          <generator class="uuid.hex"/>
         </id>
         
         <property name="name"
          not-null="true"
          length="25"
          type="string"/>
          
         <property name="description"
          not-null="true"
          length="200"
          type="string"/>
         
         <many-to-one name="productLine"
          column="productId"
          not-null="true"
          class="ProductLine"/>
         
     </class>

    </hibernate-mapping>


    評(píng)論

    # re: Hibernate動(dòng)態(tài)模型(dynamic models) 一對(duì)多映射的實(shí)現(xiàn) 2008-03-17 20:19 yeti2001
    <hibernate-mapping>
    <class name="hib.TtItem" table="TT_ITEM" schema="SCOTT">
    <id name="id" type="java.lang.Long">
    <column name="ID" precision="22" />
    <generator class="increment" />
    </id>
    <property name="name" type="java.lang.String">
    <column name="NAME" length="80" />
    </property>
    <joined-subclass entity-name="Ttbook">
    <key column="aid" />
    <property name="ttt" type="java.lang.String"></property>
    </joined-subclass>
    </class>
    </hibernate-mapping>
    有沒有試驗(yàn)過這樣的配置文件
    我的email:yeti20022@hotmail.com
      回復(fù)  更多評(píng)論
      

    # re: Hibernate動(dòng)態(tài)模型(dynamic models) 一對(duì)多映射的實(shí)現(xiàn)[未登錄] 2013-07-15 11:38 cloud
    請(qǐng)問你這個(gè)例子在這一步
    List models = new ArrayList();
    cars.put("models", models);
    的時(shí)候,最后save的時(shí)候不會(huì)出現(xiàn)
    java.lang.ClassCastException: java.lang.String cannot be cast to java.util.Map
    這個(gè)錯(cuò)嗎?  回復(fù)  更多評(píng)論
      


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 国产精品美女久久久免费 | 又黄又大的激情视频在线观看免费视频社区在线 | 中文字幕久精品免费视频| 亚洲日产2021三区在线| 国产免费小视频在线观看| 成全视频在线观看免费| 亚洲偷自拍另类图片二区| 亚洲色精品vr一区二区三区| 91免费国产自产地址入| 青青久久精品国产免费看| 亚洲国产精品成人精品软件 | 精品亚洲一区二区三区在线播放| 在线美女免费观看网站h| 边摸边吃奶边做爽免费视频99| 亚洲成在人天堂在线| 国产真实伦在线视频免费观看| 久久久久久久99精品免费| 国产精品亚洲精品日韩电影| 91情国产l精品国产亚洲区 | 亚洲黄片毛片在线观看| 美女被免费喷白浆视频| 成人免费av一区二区三区| 亚洲精华国产精华精华液好用| 久久精品国产精品亚洲艾草网| 国产小视频在线观看免费| 四虎在线成人免费网站| 日韩精品无码免费专区午夜 | 亚洲av无码成h人动漫无遮挡| 国产又粗又长又硬免费视频| 91九色老熟女免费资源站| 黄色短视频免费看| 含羞草国产亚洲精品岁国产精品| 久久亚洲春色中文字幕久久久| 亚洲精品国产V片在线观看| 最近最好的中文字幕2019免费| 久久国产精品免费专区| 国产精品免费久久久久影院| 久久亚洲中文无码咪咪爱| 亚洲人成伊人成综合网久久| 久久亚洲精品成人| 亚洲欧洲日产国码av系列天堂|