Имя пакета игнорируется после настройки стратегии обратного инжиниринга в 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
метод, классы генерируются в правильном пакете пакета.
Есть объяснения?
Благодарю.
1 ответ
Решение
Я нашел решение по этой ссылке. На самом деле, когда я переопределить 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;
}