Search code examples
javahibernatereverse-engineeringhibernate-tools

Package name ignored after customized reverse engineering strategy in hibernate


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.


Solution

  • 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;
        }