先简单说一下如何配置逆向功能
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;
}
}