JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Object Relational Mapping » Hibernate  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to topicthreaded modego to previous topicgo to next topic
己加入精華區
by koji at 2006-07-26 14:35
本主題所含的標籤
無標籤
作者 [分享] 怎樣直接讓 hbm 與 db 同步 (v3.1) [精華]
metavige

麥塔.米奇

版主

發文: 2133
積分: 10
於 2006-05-07 00:28 user profilesend a private message to usersend email to metavigereply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
http://www.hibernate.org/hib_docs/v3/reference/en/html/session-configuration.html

用 Hibernate 最討厭的,就是 DB、HBM、java 檔案的同步

在 v3.1 之後,在 hibernate 的 configuration
提供了一個處理方式,可以不用花很多時間,去用 hbm 轉 ddl
或用 ddl 轉 hbm

在 hibernate.properties 內設定
1
hibernate.hbm2ddl.auto=create|update|validate|create-drop

或 hibernate.cfg.xml 內設定
1
<property name="hbm2ddl.auto">create|update|validate|create-drop</property>


如此一來,在你剛開始啟動 SessionFactory 的時候,Hibernate 就會替你將 hbm 內所有的 table 建立起來

目前有以下幾種設定
1. create
SessionFactory 啟動的時候,會把目前 DB 內所有 TABLE DROP ,以目前 hbm 內的 table 對應關係,建立所有的 table,使用時請小心
2. update
SessionFactory 啟動的時候,會檢查目前 hbm 的 table or column 設定,如果有與目前 DB 內不一樣的,會做更新
3. validate
檢查目前 hbm 的設定,與目前 db 的欄位是否有不一致的,如果有,會丟出 Exception
(這個目前我試的結果,發現有些欄位型態,檢查起來怪怪的,比如說數字,我定義 java.math.BigDecimal,然後我 db 建立成 decimal,可是他會告訴我應該是 numeric 型態,這部分我還在嘗試。對了,這個缺點是,不會告訴你是那個欄位錯,有點傷腦筋)
4. create-drop
與第一項不同的是,當 SessionFactory 關閉的時候,就會把所有的 table drop 掉,蠻恐怖的設定,目前還沒有勇氣試

如果在剛剛開始的時候,create 很好用,不用再去擔心要怎樣跟 db 同步
但如果是已經用了一段時間,要修改 schema,可以使用 update (但還是建議備份一下)
至於 validate 跟 create-drop ~ 有需要的人可以試試看吧


reply to postreply to post
請各位新手參考 論壇規範Java 新手 FAQ
作者 Re:[分享] 怎樣直接讓 hbm 與 db 同步 (v3.1) [Re:metavige]
jormeg





發文: 2
積分: 0
於 2006-05-10 14:38 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
現在才看到這篇
昨天我試了一個下午
每次新增 table 內的屬性都被改掉
後來看到 設定檔內的這個 是在 create Orz
mark起來就OK了 ^^
但是還是感謝你


reply to postreply to post
作者 Re:[分享] 怎樣直接讓 hbm 與 db 同步 (v3.1) [Re:metavige]
walalah





發文: 9
積分: 1
於 2006-05-18 09:55 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
我只知道create,沒想到還有其他的屬性,真是感謝了!

不過大概都是會mark起來吧...
資料庫的table還是自己對應處理比較保險...


reply to postreply to post
作者 Re:[分享] 怎樣直接讓 hbm 與 db 同步 (v3.1) [Re:metavige]
lueo





發文: 15
積分: 0
於 2006-06-04 19:49 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
在hibernate設置的話,Unit Testing的時候會變成
SchemaExport -> setup() -> testxxx() -> teardown() ->
SchemaExport -> setup() -> testxxx() -> teardown() ->
SchemaExport -> setup() -> testxxx() -> teardown()
所以我都是在需要的時候做 SchemaExport,這樣Unit Testing的時候就只有
setup() -> testxxx() -> teardown() ->
setup() -> testxxx() -> teardown() ->
setup() -> testxxx() -> teardown() ->
附上SchemaExport的Ant Task:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  <target name="schema-drop" depends="compile">
    <hibernatetool destdir="">
      <configuration configurationfile="${build.classes.dir}/hibernate.cfg.xml" />
      <hbm2ddl drop="true" create="false" export="true" update="false" />
    </hibernatetool>
  </target>
 
  <target name="schema-recreate" depends="compile">
    <hibernatetool destdir="">
      <configuration configurationfile="${build.classes.dir}/hibernate.cfg.xml" />
      <hbm2ddl drop="true" create="true" export="true" update="false" />
    </hibernatetool>
  </target>
 
  <target name="schema-document" depends="compile" description="Generate a html description of the mappings">
    <hibernatetool destdir="${hibernate-html.dir}">
      <configuration configurationfile="${build.classes.dir}/hibernate.cfg.xml" />
      <hbm2doc />
    </hibernatetool>
  </target>


reply to postreply to post
» JWorld@TW »  Object Relational Mapping » Hibernate

reply to topicthreaded modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8