我在hibernate中重写逆向工程的默认策略。
public class MyReverseEngineeringStrategy extends DelegatingReverseEngineeringStrategy {
public MyReverseEngineeringStrategy(ReverseEngineeringStrategy delegate) {
super(delegate);
}
@Override
public String columnToPropertyName( TableIdentifier table, String column) {
return column;
}
@Override
public String tableToClassName( TableIdentifier table){
return table.getName();
}
}
问题是类是在默认包中生成的,而不是在我指定的包名中生成的。如果我删除了tableToClassName
方法,类就会在包右包中生成。
解释吗?
谢谢。
我确实在这个链接中找到了一个解决方案。事实上,当我重写tableToClassName
时,我必须指定类的全名,即与包一起。
我尝试了链接中建议的解决方案,它有效。这是我的新MyReverseEngineeringStrategy
类:
public class MyReverseEngineeringStrategy extends DelegatingReverseEngineeringStrategy {
public MyReverseEngineeringStrategy(ReverseEngineeringStrategy delegate) {
super(delegate);
}
@Override
public String columnToPropertyName( TableIdentifier table,
String column) {
return column;
}
@Override
public String tableToClassName(TableIdentifier tableIdentifier) {
final String defaultClassName = super.tableToClassName(tableIdentifier);
final String packageName = this.extractPackageName(defaultClassName);
final String className = tableIdentifier.getName();
final String concatedString = packageName.concat(className);
return concatedString;
}
private String extractPackageName(String defaultClassName) {
int lastIndex = defaultClassName.lastIndexOf(".");
final String packageName = defaultClassName.substring(0, lastIndex + 1);
return packageName;
}