首页 文章

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

提问于
浏览
1

我有一个表有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

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

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

    }

相关问题