gpt4 book ai didi

java - Hibernate复数化

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:41:55 25 4
gpt4 key购买 nike

我有

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

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

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

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

最佳答案

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

It is possible to implement a user strategy. Such strategy must implement org.hibernate.cfg.reveng.ReverseEngineeringStrategy. It is recommended that one uses the DelegatingReverseEngineeringStrategy and provide a public constructor which takes another ReverseEngineeringStrategy as argument. This will allow you to only implement the relevant methods and provide a fallback strategy. Example of custom delegating strategy which converts all column names that ends with "PK" into a property named "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 目前是不可能的。

关于java - Hibernate复数化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2274903/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com