1. 程式人生 > >hibernate逆向工程遇到的問題總結

hibernate逆向工程遇到的問題總結

先簡單說一下如何配置逆向功能

1、首先肯定是要安裝hibernate-tools外掛,這個自己百度一大堆

2、連線eclipse自帶的Data Source

3、配置hibernate-tools

前面這些操作百度上都可以搜得到,就不詳細說明啦,主要是下面遇到一些坑。

1、配置hibernate時候遇到問題An error has occurred. See error log for more details.
org/eclipse/jpt/jpa/core/JpaFacet

解決:在配置時候不選擇Project選項就可以了

2、因為資料庫的表名和我想要生成的實體類名稱不一致,因此需要改名字。

解決方法有兩種。

   1)、 開啟hibernate-revenge.xml,開啟table&Column檢視,點選add,在class name框可以輸入想要生成的實體名稱

  2)、自定義類,實現org.hibernate.cfg.reveng.DefaultReverseEngineeringStrategy類,重寫 tableToClassName方法,在這個方法裡面就可以用程式碼過濾成你想要的實體名稱

以下為個人程式碼(去掉下劃線以及前面的表格標註)

import org.hibernate.cfg.reveng.DefaultReverseEngineeringStrategy;  
import org.hibernate.cfg.reveng.ReverseEngineeringSettings;  
import org.hibernate.cfg.reveng.ReverseEngineeringStrategy;  
import org.hibernate.cfg.reveng.TableIdentifier;  
public class CustomReverseEngineeringStrategy extends  
       DefaultReverseEngineeringStrategy {  
 
   public CustomReverseEngineeringStrategy(ReverseEngineeringStrategy delegate) {  
       super();  
   }  
    
   public CustomReverseEngineeringStrategy(){  
   }  
 
   private ReverseEngineeringSettings settings;  
    
   @Override  
   public String tableToClassName(TableIdentifier table) {  
       String tableName = table.getName();  
       if (tableName != null && (tableName.toUpperCase().startsWith("T_NY_") || tableName.toUpperCase().startsWith("TBL_"))) {  
           String pkgName = settings.getDefaultPackageName();  
           String arr[] = tableName.split("_");
           StringBuffer sb = new StringBuffer();
           for(String str : arr) {
        	   sb.append(Character.toUpperCase(str.charAt(0))).append(str.substring(1));
           }
           String callName = sb.substring(3);
           return callName;  
 
       } else {  
           return super.tableToClassName(table);  
       }  
   };  
 
   public void setSettings(ReverseEngineeringSettings settings) {  
       super.setSettings(settings);  
       this.settings = settings;  
   }  
}