Spring下使用Hibenrate annotation

topinking發表於2008-07-24

Spring下使用Hibenrate annotation

隨著Hibernate3.2ga的推出,hibernate-annotation-3.2ga和hibernate-entitymanager也隨之推出。EntityManager還沒有用過,但是Annotation卻徹底解決了hbm檔案和domain類同步的問題。hibernate-annotation的中文文件也很詳細,感謝翻譯者的辛勤勞動。
於是將正在進行的hibernate專案進行了升級,為了防止忘記,將步驟記錄如下:
  • 將最新的hibernate.jar和hibernate-annotation.jar以及ejb3-persistence.jar加入classpath.
  • 修改spring配置檔案中的sessionFactory:
    Java程式碼 複製程式碼
    1. <bean id="sessionFactory" class="org.<SPAN class=hilite1>spring</SPAN>framework.orm.<SPAN class=hilite2>hibernate</SPAN>3.<SPAN class=hilite3>annotation</SPAN>.<SPAN class=hilite3>Annotation</SPAN>SessionFactoryBean">   
    2.    <property name="dataSource"><ref bean="dataSource" /></property>   
    3.    <property name="annotatedClasses"><!-- or use <property name="annotatedPackages"> -->   
    4.   <list>                 
    5.     <value>security.user.model.User</value>   
    6.     <value>security.user.model.Dept</value>   
    7.   </list>   
    8. </property>   
    9. ..  
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
       <property name="dataSource"><ref bean="dataSource" /></property>
       <property name="annotatedClasses"><!-- or use <property name="annotatedPackages"> -->
      <list>				
        <value>security.user.model.User</value>
        <value>security.user.model.Dept</value>
      </list>
    </property>
    ..
    
  • 刪除原有的hbm檔案.

BTW,AnnotationSessionFactoryBean的annotatedPackages屬性允許輸入包名,但是我試了很多次沒有成功,提示unmapped entity,還望達人指教。
接下來最麻煩的是修改domain類,注意要保留原有的Xdoclet註釋,以防萬一。簡單的辦法是使用最新的HibernateTools,我們直接安裝了JBossIDE2.0Beta2,簡略的使用步驟為:
  • 使用嚮導建立一個Hibernate Configuration File(cfg.xml),同時建立一個console configuration,注意加入jdbc driver和ejb3-persistence.jar
  • 然後新建一個Hibernate Code Generation,同時建立reveng.xml,目的是配置反相工程的一些策略。注意正確的配置Exporters選項.
  • run!
評論
diorsky 2007-04-16
Hibernate的annotatedPackages不是為了用來替代annotatedClasses,他會做其他一些事情,比如讓你定義package-level annotations,Hibernate暫時還不支援通過包來自動載入annotated classes的方法,你或者可以通過配置方式把包下的class寫到資料庫或xml來讀取classes.
diorsky 2007-04-16
Hibernate的annotatedPackages不是為了用來替代annotatedClasses,他會做其他一些事情,比如讓你定義package-level annotations,Hibernate暫時還不支援通過包來自動載入annotated classes的方法,你或者可以通過配置方式把包下的class寫到資料庫或xml來讀取classes.
lighter 2006-11-22
annotation,convention的影響力正在慢慢擴大.

相關文章