在hibernate中定制逆向工程策略后忽略包名



我在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;
    }

最新更新