Hibernate逆向工程 - 以任何智能方式排除不必要的列?

时间:2015-10-29 00:57:17

标签: hibernate reverse-engineering

我有一张表有300列 我想通过使用Eclipse - Hibernate工具的逆向工程从表中获取POJO。 我不希望生成的POJO中存在所有列。

问题是列太多了,所以我需要在hibernate.reveng.xml文件中指定所有列名,以排除其中的许多列。

我知道如何使用hibernate.reveng.xml文件中的以下标记排除每一列。

<table name="PEOPLE">
    <column name="REG_CODE" exclude="true"/>
       ..... <!-- around 300 lines to exclude unnecessary columns -->
</table>

在输入(或从生成的.hbm.xml文件中复制并粘贴)所有列名称之前,我想知道有什么简单的方法可以从生成的POJO中排除不必要的列。

我从JBOSS网站的官方Hibernate文档中获得了关于使用org.hibernate.cfg.reveng.DelegatingReverseEngineeringStrategy的提示。

有人可以与我分享您的经历吗?

提前谢谢。

1 个答案:

答案 0 :(得分:1)

我自己找到了答案。 我想没有人有这样的问题,但我。 这是我能做的一件事。 我知道它并不那么优雅,但我可以达到我想要的效果。

reveng.xml

<hibernate-reverse-engineering>
<schema-selection match-schema="TRADE"/>
<table-filter match-name="PEOPLE"/> 
<table-filter match-name="PRODUCT"/></hibernate-reverse-engineering>

CustomReverseEngineeringStrategy.java

public class CustomReverseEngineeringStrategy extends DelegatingReverseEngineeringStrategy {

public CustomReverseEngineeringStrategy(ReverseEngineeringStrategy delegate) {
    super(delegate);
}

@Override
public boolean excludeColumn(TableIdentifier identifier, String columnName) {
    if (identifier.getName().equals("PEOPLE") && (
            columnName.equals("PERSON_CODE")
            || columnName.startsWith("NAME") 
            )) {
        return false;
    }
    if (identifier.getName().equals("PRODUCT") &&  (
            columnName.startsWith("PRODUCT_CODE") 
            || columnName.startsWith("NAME") 
            || columnName.startsWith("PRICE")
            )) {
        return false;
    }
    return true;
}

}