hibernate逆向工程遇到的問題總結
阿新 • • 發佈:2019-01-03
先簡單說一下如何配置逆向功能
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; } }