Hibernate复数化

时间:2010-02-16 17:30:07

标签: java hibernate orm netbeans pluralize

我有

  • 目前正在生产用于CakePHP应用程序的MySQL数据库
  • 通过Hibernate访问同一数据库的Java SE应用程序,目前正在开发中。

我正在使用Netbeans“automigrate”功能来创建POJO类和XML文件(使用注释时我真的需要XML文件吗?)。由于模式非常复杂,手动创建表是太多的工作。

Cake期望所有数据库表都是多元化的(Address类自动映射到地址表)。运行Netbeans自动迁移时,它会对已经复数的表名进行复数化(我得到的是Addresses.java和setAddresseses()方法)。

我知道我在为同一个数据库运行两个非常不同的数据层时遇到了麻烦,但我想知道是否可以让Netbeans以单数形式生成POJO类,或者是否有另一个(更好)管理这个的方法。

1 个答案:

答案 0 :(得分:2)

进行逆向工程时,可以使用custom reverse engineering strategy。引用文档:

  

可以实现用户   战略。这种战略必须实施   org.hibernate.cfg.reveng.ReverseEngineeringStrategy.   建议使用   DelegatingReverseEngineeringStrategy   并提供一个公共构造函数   另取一个   ReverseEngineeringStrategy为   论点。这将只允许你   实施相关方法和   提供后备策略。例   自定义委托策略   转换结束的所有列名称   将“PK”改为名为“id”的属性。

public class ExampleStrategy extends DelegatingReverseEngineeringStrategy {
    public ExampleStrategy(ReverseEngineeringStrategy delegate) {
        super(delegate);
    }
    public String columnToPropertyName(TableIdentifier table, String column) {
        if(column.endsWith("PK")) {
            return "id";
        } else {
            return super.columnToPropertyName(table, column);
        }
    }
}

在您的情况下,您可能希望实施

public String tableToClassName(TableIdentifier tableIdentifier) {
    return delegate==null?null:delegate.tableToClassName(tableIdentifier);
}

从表名称生成“depluralize”类(ADDRESSES => Address)。

但遗憾的是,如果用户碰巧有(这是计划的增强),NetBeans Hibernate Reverse Engineering Wizard 不会 提供选择逆向工程策略的选项对于NetBeans 7.0,如果时间允许)。

因此,如果您想使用自定义策略,则必须使用Ant或Maven。目前NetBeans无法实现这一目标。