隨筆-124  評(píng)論-194  文章-0  trackbacks-0
           

          用C++和JS的類來(lái)類比如下:

          C++              JS
          類                 一個(gè)function(也是一個(gè)對(duì)象,即名稱-屬性集合),因?yàn)樗鼘?shí)際定義了一個(gè)類,所以又叫constructor

          成員函數(shù)     constructor的屬性prototype對(duì)象里定義,這樣用constructor來(lái)new的對(duì)象都會(huì)繼承它
          成員            在constructor中用this.xxx賦值的一般屬性
          靜態(tài)成員     直接function的名字"."賦值
          多重繼承      constructor.prototype = new SuperClass (),這樣新定義的constructor的prototype繼承了SuperClass的prototype,但要用constructor.prototype.constructor = constructor,把構(gòu)造函數(shù)賦成新的constructor

          所以說(shuō)白了,JS的類就是一個(gè)函數(shù)對(duì)象。JS自動(dòng)為它創(chuàng)建了屬性prototype,可以被new出來(lái)的對(duì)象繼承。
          posted @ 2007-05-13 18:01 我愛(ài)佳娃 閱讀(644) | 評(píng)論 (0)編輯 收藏
          例如:表示主機(jī)HOST含有多個(gè)磁盤(pán)DISK關(guān)系:

          在PD的OOM中雙擊一條關(guān)系連線,設(shè)置Navigate,這樣才會(huì)在各自hbm.xml中生成many-to-one及one-to-many關(guān)系。



          另外,根據(jù)“附文”的效率說(shuō)明還需要設(shè)置:由多方DISK維護(hù)關(guān)系,并且當(dāng)HOST更新時(shí),也要更新DISK。



          生成的HBM.XML如下:
          HOST的:
                <joined-subclass name="Host" table="host" dynamic-update="false" dynamic-insert="false" select-before-update="false" lazy="true" abstract="false"> 
                 <key on-delete="noaction" unique="true">
                   <column name="dev_id" sql-type="int" not-null="true" length="0"/>
                 </key>
                 <array name="nic" optimistic-lock="true">
                  <key on-delete="noaction" unique="true">
                   <column name="dev_id" sql-type="int" not-null="false" length="0"/>
                  </key>
                  <list-index column="IndexColumnB"/>
                  <one-to-many class="eb.nms.db.Nic"/>
                 </array>
                 <set name="disk" outer-join="false" inverse="true" lazy="true" optimistic-lock="true" cascade="save-update">
                  <key on-delete="noaction" unique="true">
                   <column name="dev_id" sql-type="int" not-null="false" length="0"/>
                  </key>
                  <one-to-many class="eb.nms.db.Disk"/>
                 </set>
                </joined-subclass>


          DISK的:
             <class name="Disk" table="disk" mutable="true" lazy="true" abstract="false">
                <id name="diskId">
                   <column name="disk_id" sql-type="int" not-null="true"/>
                   <generator class="native">  
                   </generator>
                </id>
                <property name="diskName" insert="true" update="true" optimistic-lock="true">
                   <column name="disk_name" sql-type="varchar(254)" length="254"/>
                </property>
                <many-to-one name="host" class="Host" outer-join="false" update="true" insert="true">
                 <column name="dev_id" sql-type="int" not-null="false" length="0"/>
                </many-to-one>
             </class>


          附文:
           

          Hibernate Gossip: 雙向關(guān)聯(lián)(inverse 的意義)

          多對(duì)一 、一對(duì)多 中都是單向關(guān)聯(lián),也就是其中一方關(guān)聯(lián)到另一方,而另一方不知道自己被關(guān)聯(lián)。

          如果讓雙方都意識(shí)到另一方的存在,這就形成了雙向關(guān)聯(lián),在多對(duì)一、一對(duì)多的例子可以改寫(xiě)一下,重新設(shè)計(jì)User類別如下:

          • User.java

          package onlyfun.caterpillar;

          public class User {
              private Integer id;
              private String name;
              private Room room;
           
              public User() {}

              public Integer getId() {
                  return id;
              }

              public void setId(Integer id) {
                  this.id = id;
              }

              public String getName() {
                  return name;
              }

              public void setName(String name) {
                  this.name = name;
              }

              public Room getRoom() {
                  return room;
              }

              public void setRoom(Room room) {
                  this.room = room;
              }
          }


          Room
          類別如下:

          • Room.java

          package onlyfun.caterpillar;

          import java.util.Set;

          public class Room {
              private Integer id;
              private String address;
              private Set users;
           
              public Room() {}
           
              public Integer getId() {
                  return id;
              }

              public void setId(Integer id) {
                  this.id = id;
              }
           
              public String getAddress() {
                  return address;
              }
           
              public void setAddress(String address) {
                  this.address = address;
              }

              public Set getUsers() {
                  return users;
              }

              public void setUsers(Set users) {
                  this.users = users;
              }
           
              public void addUser(User user) {
                  users.add(user);
              }
           
              public void removeUser(User user) {
                  users.remove(user);
              }
          }


          如此,User實(shí)例可參考至Room實(shí)例而維持多對(duì)一關(guān)係,而Room實(shí)例記得User實(shí)例而維持一對(duì)多關(guān)係。

          在映射文件方面,可以如下撰寫(xiě):

          • User.hbm.xml

          <?xml version="1.0" encoding="utf-8"?>
          <!DOCTYPE hibernate-mapping
           PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
           "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

          <hibernate-mapping>

              <class name="onlyfun.caterpillar.User" table="user">
                  <id name="id" column="id" type="java.lang.Integer">
                      <generator class="native"/>
                  </id>

                  <property name="name" column="name" type="java.lang.String"/>
           
                  <many-to-one name="room"
                               column="room_id"
                               class="onlyfun.caterpillar.Room"
                               cascade="save-update"
                               outer-join="true"/>
              </class>

          </hibernate-mapping>

           

          • Room.hbm.xml

          <?xml version="1.0" encoding="utf-8"?>
          <!DOCTYPE hibernate-mapping
           PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
           "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

          <hibernate-mapping>

              <class name="onlyfun.caterpillar.Room" table="room">
                  <id name="id" column="id">
                      <generator class="native"/>
                  </id>

                  <property name="address"
                            column="address"
                            type="java.lang.String"/>
           
                  <set name="users" table="user" cascade="save-update">
                      <key column="room_id"/>
                      <one-to-many class="onlyfun.caterpillar.User"/>
                  </set>
              </class>

          </hibernate-mapping>


          映射文件雙方都設(shè)定了cascadesave-update,所以您可以用多對(duì)一的方式來(lái)維持關(guān)聯(lián):

          User user1 = new User();
          user1.setName("bush");
                 
          User user2 = new User();
          user2.setName("caterpillar");

          Room room1 = new Room();
          room1.setAddress("NTU-M8-419");

          user1.setRoom(room1);
          user2.setRoom(room1);
                 
          Session session = sessionFactory.openSession();
          Transaction tx = session.beginTransaction();
                 
          session.save(user1);
          session.save(user2);

          tx.commit();
          session.close();


          或是反過(guò)來(lái)由一對(duì)多的方式來(lái)維持關(guān)聯(lián):

          User user1 = new User();
          user1.setName("bush");
                 
          User user2 = new User();
          user2.setName("caterpillar");

          Room room1 = new Room();
          room1.setUsers(new HashSet());
          room1.setAddress("NTU-M8-419");
          room1.addUser(user1);
          room1.addUser(user2);
                 
          Session session = sessionFactory.openSession();
          Transaction tx = session.beginTransaction();
                 
          session.save(room1);

          tx.commit();
          session.close();


          這邊有個(gè)效率議題可以探討,上面的程式片段Hibernate將使用以下的SQL進(jìn)行儲(chǔ)存:

          Hibernate: insert into room (address) values (?)
          Hibernate: insert into user (name, room_id) values (?, ?)
          Hibernate: insert into user (name, room_id) values (?, ?)
          Hibernate: update user set room_id=? where id=?
          Hibernate: update user set room_id=? where id=?


          上面的程式寫(xiě)法表示關(guān)聯(lián)由Room單方面維持,而主控方也是Room,User不知道Roomroom_id是多少,所以必須分別儲(chǔ)存Room User之後,再更新userroom_id

          在一對(duì)多、多對(duì)一形成雙向關(guān)聯(lián)的情況下,可以將關(guān)聯(lián)維持的控制權(quán)交給多的一方,這樣會(huì)比較有效率,理由不難理解,就像是在公司中,老闆要記住多個(gè)員工的姓名快,還是每一個(gè)員工都記得老闆的姓名快。

          所以在一對(duì)多、多對(duì)一形成雙向關(guān)聯(lián)的情況下,可以在「一」的一方設(shè)定控制權(quán)反轉(zhuǎn),也就是當(dāng)儲(chǔ)存「一」的一方時(shí),將關(guān)聯(lián)維持的控制權(quán)交給「多」的一方,以上面的例子來(lái)說(shuō),可以設(shè)定Room.hbm.xml如下:

          • Room.hbm.xml

          <?xml version="1.0" encoding="utf-8"?>
          <!DOCTYPE hibernate-mapping
           PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
           "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

          <hibernate-mapping>

              <class name="onlyfun.caterpillar.Room" table="room">
                  <id name="id" column="id">
                      <generator class="native"/>
                  </id>

                  <property name="address"
                            column="address"
                            type="java.lang.String"/>
           
                  <set name="users" table="user" cascade="save-update" inverse="true">
                      <key column="room_id"/>
                      <one-to-many class="onlyfun.caterpillar.User"/>
                  </set>
              </class>

          </hibernate-mapping>


          由於關(guān)聯(lián)的控制權(quán)交給「多」的一方了,所以直接儲(chǔ)存「一」方前,「多」的一方必須意識(shí)到「一」的存在,所以程式片段必須改為如下:

          User user1 = new User();
          user1.setName("bush");
                 
          User user2 = new User();
          user2.setName("caterpillar");

          Room room1 = new Room();
          room1.setUsers(new HashSet());
          room1.setAddress("NTU-M8-419");
          room1.addUser(user1);
          room1.addUser(user2);

          //
          多方必須意識(shí)到單方的存在
          user1.setRoom(room1);

          user2.setRoom(room1);
                 
          Session session = sessionFactory.openSession();
          Transaction tx = session.beginTransaction();
                 
          session.save(room1);

          tx.commit();
          session.close();


          上面的程式片段Hibernate將使用以下的SQL

          Hibernate: insert into room (address) values (?)
          Hibernate: insert into user (name, room_id) values (?, ?)
          Hibernate: insert into user (name, room_id) values (?, ?)


          如果控制權(quán)交給另一方了,而另一方?jīng)]有意識(shí)到對(duì)方的存在的話會(huì)如何?試著將上面的程式片段中user1.setRoom(room1); user2.setRoom(room1);移去,執(zhí)行之後,您會(huì)發(fā)現(xiàn)資料庫(kù)中room_id會(huì)出現(xiàn)null值,這種結(jié)果就好比在 多對(duì)一 中,您沒(méi)有分配給User一個(gè)Room,理所當(dāng)然的,room_id會(huì)出現(xiàn)null。

           

          posted @ 2007-04-15 17:17 我愛(ài)佳娃 閱讀(6453) | 評(píng)論 (0)編輯 收藏

           

          http://macrochen.blogdriver.com/macrochen/687759.html
          posted @ 2007-04-15 15:06 我愛(ài)佳娃 閱讀(898) | 評(píng)論 (0)編輯 收藏

          執(zhí)行:New->Conceptual Data Model
          編譯完概念模型后,再通過(guò)CDM生成PDM和OOM,注意要先生成OOM,再生成PDM。
          在3種模型都具備時(shí),生成JAVA CODE時(shí)才會(huì)有*.hbm.xml文件:

          執(zhí)行:Tools->Generate Object-Oriented Model
          在對(duì)話框中,選擇Detail,勾選O/R Mapping,點(diǎn)擊Enable Transformations,在多出來(lái)的選項(xiàng)卡Extended Model Definitions中的O/R Mapping頁(yè)中選擇Hibernate。

          執(zhí)行:Tools->Generate Physical Data Model
          在對(duì)話框中,選擇Detail,勾選O/R Mapping,點(diǎn)擊Enable Transformations,在多出來(lái)的選項(xiàng)卡Extended Model Definitions中的O/R Mapping頁(yè)中選擇Hibernate。

          再執(zhí)行:Language->Generate Java Code

          就會(huì)看見(jiàn)生成的JAVA代碼和映射HBM.XML文件

          這里只是剛剛摸索的一些步驟,如果有實(shí)際用過(guò),或者有詳細(xì)資料的XDJM,請(qǐng)回復(fù)出來(lái)共享下。多謝。
          PD的幫助讓人摸不著頭腦。

          這是最后結(jié)果:

          posted @ 2007-04-07 15:25 我愛(ài)佳娃 閱讀(9886) | 評(píng)論 (11)編輯 收藏

          解決方案:針對(duì)windows xp


          1. 運(yùn)行g(shù)pedit.msc到組策略管理界面下,計(jì)算機(jī)配置--->Winsows設(shè)置----->安全設(shè)置--->本地策略--->用戶權(quán)利指派,看看右邊有一行:"拒絕從網(wǎng)絡(luò)訪問(wèn)這臺(tái)計(jì)算機(jī) "看它的屬性里有沒(méi)有g(shù)uest一項(xiàng),若有,則刪除.


          2. 若還不行,在我的電腦窗口里 工具--->文件夾選項(xiàng)---->查看----->高級(jí)選項(xiàng)里有"使用簡(jiǎn)單文件共享" 打勾去掉,確定下去,.然后再訪問(wèn).


          3. 啟用 Guest、修改安全策略允許Guest從網(wǎng)絡(luò)訪問(wèn)、禁用3里面的安全策略或者給Guest
          加個(gè)密碼。

          http://hi.baidu.com/zhangqiguang123/blog/item/00882ff440c6d3ee7609d7f3.html
          posted @ 2007-04-07 11:09 我愛(ài)佳娃 閱讀(356) | 評(píng)論 (0)編輯 收藏

           

          regex_t rt1_;

           
          int cflags = RE_SYNTAX_AWK;
           cflags 
          &= ~REG_NOSUB;
           
           
          if (regcomp (&rt1_, // match: Interesting ports on 10.45.8.12:
            "([0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\.([0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\.([0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\.([0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])"
            cflags) 
          != 0)
           
          {
               ulogEx(ULOG_LL_WARNING, MESW_DEV_NM,MON_ULOG_MID,MON_ULOG_EC_TRACE,
                
          "%s: reg comp error!\n\n", __func__);
           }



           
          static char ip [32];

           regmatch_t rm [
          1];
           memset (
          &rm, 0sizeof rm);
           
          if (0 == regexec (&rt1_, pline, 1, rm, 0))
           

            strncpy (ip, 
          &pline[rm[0].rm_so], rm[0].rm_eo-rm[0].rm_so+1);
            ip [rm[
          0].rm_eo-rm[0].rm_so] = '\0';
            
            
          return ip;
           }

           
          else
            
          return NULL;


           regfree (
          &rt1_);
          posted @ 2007-04-04 16:47 我愛(ài)佳娃 閱讀(2707) | 評(píng)論 (0)編輯 收藏
               摘要: 為了大家能更好使用象ECLIPSE這種“巨無(wú)霸”(且不斷在增長(zhǎng))。網(wǎng)上看的可以優(yōu)化XP的文章,并自己寫(xiě)了一個(gè)腳本文件來(lái)停止服務(wù),避免大家一個(gè)個(gè)去改麻煩。我試了可以,大概停了10多個(gè)服務(wù)。但有問(wèn)題別找我呀!俺也不懂的說(shuō)。 停止不用的服務(wù)bat命令 Code highlighting produced by Actip...  閱讀全文
          posted @ 2007-04-01 14:00 我愛(ài)佳娃 閱讀(11673) | 評(píng)論 (2)編輯 收藏
               摘要: http://blog.csdn.net/sunjavaduke/archive/2007/03/15/1530069.aspx ??? <target name="sh" depends="compile">??? ?<exec command="sh ./runsvr.sh" failonerror="false"/>??? </target>...  閱讀全文
          posted @ 2007-03-22 09:43 我愛(ài)佳娃 閱讀(3291) | 評(píng)論 (0)編輯 收藏

          歸納一些網(wǎng)上取JAVA路徑的方法:

          注明:如果從ANT啟動(dòng)程序,this.getClass().getResource("")取出來(lái)的比較怪,直接用JAVA命令行調(diào)試就可成功。
           
          得到classpath和當(dāng)前類的絕對(duì)路徑的一些方法

          ?????????獲得CLASSPATH之外路徑的方法:
          ???????? URL base = this.getClass().getResource(""); //先獲得本類的所在位置,如/home/popeye/testjava/build/classes/net/
          ???????? String path = new File(base.getFile(), "../../../"+name).getCanonicalPath(); //就可以得到/home/popeye/testjava/name

            下面是一些得到classpath和當(dāng)前類的絕對(duì)路徑的一些方法。你可能需要使用其中的一些方法來(lái)得到你需要的資源的絕對(duì)路徑。

            1.FileTest.class.getResource("")

            得到的是當(dāng)前類FileTest.class文件的URI目錄。不包括自己!

            如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/com/test/

            2.FileTest.class.getResource("/")

            得到的是當(dāng)前的classpath的絕對(duì)URI路徑。

            如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/

            3.Thread.currentThread().getContextClassLoader().getResource("")

            得到的也是當(dāng)前ClassPath的絕對(duì)URI路徑。

            如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/

            4.FileTest.class.getClassLoader().getResource("")

            得到的也是當(dāng)前ClassPath的絕對(duì)URI路徑。

            如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/

            5.ClassLoader.getSystemResource("")

            得到的也是當(dāng)前ClassPath的絕對(duì)URI路徑。

            如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/

            我推薦使用Thread.currentThread().getContextClassLoader().getResource("")來(lái)得到當(dāng)前的classpath的絕對(duì)路徑的URI表示法。

          ??? 在Web應(yīng)用程序中,我們一般通過(guò)ServletContext.getRealPath("/")方法得到Web應(yīng)用程序的根目錄的絕對(duì)路徑。這樣,我們只需要提供相對(duì)于Web應(yīng)用程序根目錄的路徑,就可以構(gòu)建出定位資源的絕對(duì)路徑。
          ???
          ???


          注意點(diǎn):
          ??? 1.盡量不要使用相對(duì)于System.getProperty("user.dir")當(dāng)前用戶目錄的相對(duì)路徑。這是一顆定時(shí)炸彈,隨時(shí)可能要你的命。

            2.盡量使用URI形式?
          的絕對(duì)路徑資源。它可以很容易的轉(zhuǎn)變?yōu)閁RI,URL,F(xiàn)ile對(duì)象。

            3.盡量使用相對(duì)classpath的相對(duì)路徑。不要使用絕對(duì)路徑。使用上面ClassLoaderUtil類的public static URL getExtendResource(String relativePath)方法已經(jīng)能夠使用相對(duì)于classpath的相對(duì)路徑定位所有位置的資源。

            4.絕對(duì)不要使用硬編碼的絕對(duì)路徑。因?yàn)?,我們完全可以使用ClassLoader類的getResource("")方法得到當(dāng)前classpath的絕對(duì)路徑。

          使用硬編碼的絕對(duì)路徑是完全沒(méi)有必要的!它一定會(huì)讓你死的很難看!程序?qū)o(wú)法移植!

            如果你一定要指定一個(gè)絕對(duì)路徑,那么使用配置文件,也比硬編碼要好得多!

            當(dāng)然,我還是推薦你使用程序得到classpath的絕對(duì)路徑來(lái)拼資源的絕對(duì)路徑

          posted @ 2007-03-21 11:43 我愛(ài)佳娃 閱讀(4762) | 評(píng)論 (2)編輯 收藏

          inverse,表示兩個(gè)表的關(guān)系由誰(shuí)維護(hù)。值為false的一方將維護(hù)這種關(guān)系。如下面多對(duì)多關(guān)系中,由HOST來(lái)維護(hù)它們之間的關(guān)系表hostalarmrule。

          cascade,表示更新本表時(shí),是否附帶更新與其相關(guān)的其它表。如下面,更新HOST表,由于值為save-update,也會(huì)將rules增加或者更新到ALARMRULE表;但,刪除HOST時(shí),不會(huì)刪除ALARMRULE表中數(shù)據(jù)。除非,其值為all。

          ??? <class name="db.Host" table="host" catalog="rw">
          ??????? <set name="rules" inverse="false" table="hostalarmrule" cascade="save-update">
          ??????????? <key column="host_id"/>
          ??????????? <many-to-many class="db.Alarmrule" column="alarmrule_id"/>
          ??????? </set>???????????????
          ??? </class>

          ??? <class name="db.Alarmrule" table="alarmrule" catalog="rw">
          ????? <set name="hosts" table="hostalarmrule" inverse="true">
          ??????????? <key column="alarmrule_id"/>
          ??????????? <many-to-many class="db.Host" column="host_id"/>
          ??????? </set>
          ??? </class>

          posted @ 2007-03-13 21:17 我愛(ài)佳娃 閱讀(474) | 評(píng)論 (0)編輯 收藏
          僅列出標(biāo)題
          共13頁(yè): First 上一頁(yè) 5 6 7 8 9 10 11 12 13 下一頁(yè) 
          主站蜘蛛池模板: 礼泉县| 宣恩县| 固始县| 轮台县| 池州市| 青浦区| 东乌| 黎川县| 孝义市| 乡城县| 杭锦后旗| 会泽县| 兴隆县| 新巴尔虎右旗| 新兴县| 大港区| 财经| 景宁| 宁蒗| 锦屏县| 旅游| 合水县| 莫力| 濮阳县| 垫江县| 柘荣县| 庆安县| 锡林浩特市| 新化县| 文登市| 双辽市| 丹寨县| 宿迁市| 嵩明县| 营口市| 肇庆市| 贡嘎县| 托克托县| 许昌县| 简阳市| 江达县|