我有一张表有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的提示。
有人可以与我分享您的经历吗?
提前谢谢。
答案 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;
}
}