用C++和JS的類來類比如下:
C++ JS
類 一個function(也是一個對象,即名稱-屬性集合),因為它實際定義了一個類,所以又叫constructor
成員函數(shù) constructor的屬性prototype對象里定義,這樣用constructor來new的對象都會繼承它
成員 在constructor中用this.xxx賦值的一般屬性
靜態(tài)成員 直接function的名字"."賦值
多重繼承 constructor.prototype = new SuperClass (),這樣新定義的constructor的prototype繼承了SuperClass的prototype,但要用constructor.prototype.constructor = constructor,把構(gòu)造函數(shù)賦成新的constructor
所以說白了,JS的類就是一個函數(shù)對象。JS自動為它創(chuàng)建了屬性prototype,可以被new出來的對象繼承。
posted @
2007-05-13 18:01 我愛佳娃 閱讀(639) |
評論 (0) |
編輯 收藏
例如:表示主機(jī)HOST含有多個磁盤DISK關(guān)系:
在PD的OOM中雙擊一條關(guān)系連線,設(shè)置Navigate,這樣才會在各自hbm.xml中生成many-to-one及one-to-many關(guān)系。

另外,根據(jù)“附文”的效率說明還需要設(shè)置:由多方DISK維護(hù)關(guān)系,并且當(dāng)HOST更新時,也要更新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>
附文:
在 多對一 、一對多 中都是單向關(guān)聯(lián),也就是其中一方關(guān)聯(lián)到另一方,而另一方不知道自己被關(guān)聯(lián)。
如果讓雙方都意識到另一方的存在,這就形成了雙向關(guān)聯(lián),在多對一、一對多的例子可以改寫一下,重新設(shè)計User類別如下:
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類別如下:
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實例可參考至Room實例而維持多對一關(guān)係,而Room實例記得User實例而維持一對多關(guān)係。
在映射文件方面,可以如下撰寫:
<?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>
<?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è)定了cascade為save-update,所以您可以用多對一的方式來維持關(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ā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();
這邊有個效率議題可以探討,上面的程式片段Hibernate將使用以下的SQL進(jìn)行儲存:
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=?
上面的程式寫法表示關(guān)聯(lián)由Room單方面維持,而主控方也是Room,User不知道Room的room_id是多少,所以必須分別儲存Room與 User之後,再更新user的room_id。
在一對多、多對一形成雙向關(guān)聯(lián)的情況下,可以將關(guān)聯(lián)維持的控制權(quán)交給多的一方,這樣會比較有效率,理由不難理解,就像是在公司中,老闆要記住多個員工的姓名快,還是每一個員工都記得老闆的姓名快。
所以在一對多、多對一形成雙向關(guān)聯(lián)的情況下,可以在「一」的一方設(shè)定控制權(quán)反轉(zhuǎn),也就是當(dāng)儲存「一」的一方時,將關(guān)聯(lián)維持的控制權(quán)交給「多」的一方,以上面的例子來說,可以設(shè)定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)交給「多」的一方了,所以直接儲存「一」方前,「多」的一方必須意識到「一」的存在,所以程式片段必須改為如下:
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);
// 多方必須意識到單方的存在 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)]有意識到對方的存在的話會如何?試著將上面的程式片段中user1.setRoom(room1);與 user2.setRoom(room1);移去,執(zhí)行之後,您會發(fā)現(xiàn)資料庫中room_id會出現(xiàn)null值,這種結(jié)果就好比在 多對一 中,您沒有分配給User一個Room,理所當(dāng)然的,room_id會出現(xiàn)null。
|
posted @
2007-04-15 17:17 我愛佳娃 閱讀(6453) |
評論 (0) |
編輯 收藏
http://macrochen.blogdriver.com/macrochen/687759.html
posted @
2007-04-15 15:06 我愛佳娃 閱讀(896) |
評論 (0) |
編輯 收藏
執(zhí)行:New->Conceptual Data Model
編譯完概念模型后,再通過CDM生成PDM和OOM,注意要先生成OOM,再生成PDM。
在3種模型都具備時,生成JAVA CODE時才會有*.hbm.xml文件:
執(zhí)行:Tools->Generate Object-Oriented Model
在對話框中,選擇Detail,勾選O/R Mapping,點擊Enable Transformations,在多出來的選項卡Extended Model Definitions中的O/R Mapping頁中選擇Hibernate。
執(zhí)行:Tools->Generate Physical Data Model
在對話框中,選擇Detail,勾選O/R Mapping,點擊Enable Transformations,在多出來的選項卡Extended Model Definitions中的O/R Mapping頁中選擇Hibernate。
再執(zhí)行:Language->Generate Java Code
就會看見生成的JAVA代碼和映射HBM.XML文件
這里只是剛剛摸索的一些步驟,如果有實際用過,或者有詳細(xì)資料的XDJM,請回復(fù)出來共享下。多謝。
PD的幫助讓人摸不著頭腦。
這是最后結(jié)果:
posted @
2007-04-07 15:25 我愛佳娃 閱讀(9883) |
評論 (11) |
編輯 收藏
解決方案:針對windows xp
1. 運行g(shù)pedit.msc到組策略管理界面下,計算機(jī)配置--->Winsows設(shè)置----->安全設(shè)置--->本地策略--->用戶權(quán)利指派,看看右邊有一行:"拒絕從網(wǎng)絡(luò)訪問這臺計算機(jī) "看它的屬性里有沒有g(shù)uest一項,若有,則刪除.
2. 若還不行,在我的電腦窗口里 工具--->文件夾選項---->查看----->高級選項里有"使用簡單文件共享" 打勾去掉,確定下去,.然后再訪問.
3. 啟用 Guest、修改安全策略允許Guest從網(wǎng)絡(luò)訪問、禁用3里面的安全策略或者給Guest
加個密碼。
http://hi.baidu.com/zhangqiguang123/blog/item/00882ff440c6d3ee7609d7f3.html
posted @
2007-04-07 11:09 我愛佳娃 閱讀(355) |
評論 (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, 0, sizeof 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 我愛佳娃 閱讀(2706) |
評論 (0) |
編輯 收藏
摘要: 為了大家能更好使用象ECLIPSE這種“巨無霸”(且不斷在增長)。網(wǎng)上看的可以優(yōu)化XP的文章,并自己寫了一個腳本文件來停止服務(wù),避免大家一個個去改麻煩。我試了可以,大概停了10多個服務(wù)。但有問題別找我呀!俺也不懂的說。
停止不用的服務(wù)bat命令
Code highlighting produced by Actip...
閱讀全文
posted @
2007-04-01 14:00 我愛佳娃 閱讀(11670) |
評論 (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 我愛佳娃 閱讀(3289) |
評論 (0) |
編輯 收藏
歸納一些網(wǎng)上取JAVA路徑的方法:
注明:如果從ANT啟動程序,this.getClass().getResource("")取出來的比較怪,直接用JAVA命令行調(diào)試就可成功。
得到classpath和當(dāng)前類的絕對路徑的一些方法
?????????獲得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)前類的絕對路徑的一些方法。你可能需要使用其中的一些方法來得到你需要的資源的絕對路徑。
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的絕對URI路徑。
如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/
3.Thread.currentThread().getContextClassLoader().getResource("")
得到的也是當(dāng)前ClassPath的絕對URI路徑。
如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/
4.FileTest.class.getClassLoader().getResource("")
得到的也是當(dāng)前ClassPath的絕對URI路徑。
如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/
5.ClassLoader.getSystemResource("")
得到的也是當(dāng)前ClassPath的絕對URI路徑。
如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/
我推薦使用Thread.currentThread().getContextClassLoader().getResource("")來得到當(dāng)前的classpath的絕對路徑的URI表示法。
??? 在Web應(yīng)用程序中,我們一般通過ServletContext.getRealPath("/")方法得到Web應(yīng)用程序的根目錄的絕對路徑。這樣,我們只需要提供相對于Web應(yīng)用程序根目錄的路徑,就可以構(gòu)建出定位資源的絕對路徑。
???
???
注意點:
??? 1.盡量不要使用相對于System.getProperty("user.dir")當(dāng)前用戶目錄的相對路徑。這是一顆定時炸彈,隨時可能要你的命。
2.盡量使用URI形式?
的絕對路徑資源。它可以很容易的轉(zhuǎn)變?yōu)閁RI,URL,F(xiàn)ile對象。
3.盡量使用相對classpath的相對路徑。不要使用絕對路徑。使用上面ClassLoaderUtil類的public static URL getExtendResource(String relativePath)方法已經(jīng)能夠使用相對于classpath的相對路徑定位所有位置的資源。
4.絕對不要使用硬編碼的絕對路徑。因為,我們完全可以使用ClassLoader類的getResource("")方法得到當(dāng)前classpath的絕對路徑。
使用硬編碼的絕對路徑是完全沒有必要的!它一定會讓你死的很難看!程序?qū)o法移植!
如果你一定要指定一個絕對路徑,那么使用配置文件,也比硬編碼要好得多!
當(dāng)然,我還是推薦你使用程序得到classpath的絕對路徑來拼資源的絕對路徑
posted @
2007-03-21 11:43 我愛佳娃 閱讀(4760) |
評論 (2) |
編輯 收藏
inverse,表示兩個表的關(guān)系由誰維護(hù)。值為false的一方將維護(hù)這種關(guān)系。如下面多對多關(guān)系中,由HOST來維護(hù)它們之間的關(guān)系表hostalarmrule。
cascade,表示更新本表時,是否附帶更新與其相關(guān)的其它表。如下面,更新HOST表,由于值為save-update,也會將rules增加或者更新到ALARMRULE表;但,刪除HOST時,不會刪除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 我愛佳娃 閱讀(474) |
評論 (0) |
編輯 收藏