3

我有

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

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

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

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

4

1 回答 1

2

在进行逆向工程时,可以使用自定义逆向工程策略。引用文档:

可以实施用户策略。这种策略必须实现 org.hibernate.cfg.reveng.ReverseEngineeringStrategy. 建议使用 DelegatingReverseEngineeringStrategy and 提供一个公共构造函数,该构造函数将另一个 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);
}

ADDRESSES从表名( => )生成的“去复数”类Address

但遗憾的是,如果用户碰巧有任何逆向工程策略,NetBeans Hibernate 逆向工程向导 提供选项(如果时间允许,这是为 NetBeans 7.0 计划的一项增强功能)。

因此,如果您想使用自定义策略,则必须使用 Ant 或 Maven。目前这在 NetBeans 中是不可能的。

于 2010-02-16T21:00:36.383 回答