【问题标题】:Hibernate pluralization休眠复数
【发布时间】:2011-01-17 12:13:33
【问题描述】:

我有

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

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

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

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

【问题讨论】:

    标签: java hibernate orm netbeans pluralize


    【解决方案1】:

    在进行逆向工程时,可以使用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);
    }
    

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

    但遗憾的是,NetBeans Hibernate Reverse Engineering Wizard 没有 如果用户碰巧有任何逆向工程策略,则可以选择(这是为 NetBeans 计划的一项增强功能如果时间允许,7.0)。

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

    【讨论】:

      猜你喜欢
      • 2018-04-10
      • 2014-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多