/**
* Copyright (c) 2005-2010 springside.org.cn
*
* Licensed under the Apache License, Version 2.0 (the "License");
*
* $Id: IgnorePrefixReverseEngineeringStrategy.java 1184 2010-08-29 03:17:10Z calvinxiu $
*/
package org.xmx0632.deliciousfruit.utilities.hibernatetool;
import org.hibernate.cfg.reveng.DelegatingReverseEngineeringStrategy;
import org.hibernate.cfg.reveng.ReverseEngineeringStrategy;
import org.hibernate.cfg.reveng.TableIdentifier;
/**
* Hibernate Tools从数据库逆向生成Entity POJO时, Class名去除表名中的前缀的策略.
*
* 如T_ACCT_USER默认的Class名为TAcctUser,忽略的前缀长度为5时,处理结果为User.
*
* 注意必须继承子类以设定前缀的长度.
*
* @author calvin
*/
public abstract class IgnorePrefixReverseEngineeringStrategy extends
DelegatingReverseEngineeringStrategy {
public IgnorePrefixReverseEngineeringStrategy(
ReverseEngineeringStrategy delegate) {
super(delegate);
}
@Override
public String tableToClassName(TableIdentifier tableIdentifier) {
String delegateResult = super.tableToClassName(tableIdentifier);
return ignorePrefix(delegateResult);
}
protected String ignorePrefix(String delegateResult) {
int lastDotIndex = delegateResult.lastIndexOf('.');
String packageName = delegateResult.substring(0, lastDotIndex + 1);
String className = delegateResult.substring(lastDotIndex
+ getPrefixLength() + 1);
String fullClassName = packageName + className;
return fullClassName;
}
/**
* 在子类重载设定表名的前缀长度.
*/
protected abstract int getPrefixLength();
}