I override the default strategy of reverse engineering in 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();
}
}
The problem is that classes are generated in a default package and not in the package name I specified. If I delete the tableToClassName
method, classes are generated in the package right package.
Any explanations?
Thanks.
I did find a solution in this link. In fact when I override tableToClassName
I must specify the full name of the class, i.e with the package.
I tried the solution suggested in the link and it works. Here my new MyReverseEngineeringStrategy
class:
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;
}