【发布时间】:2011-03-10 04:53:52
【问题描述】:
我想知道在使用 hibernate 生成 POJO 时如何更改它的名称。
我的表有一个命名约定:FR_ 和 TRN_。 在生成 POJO 时,我希望删除 FR 和 TRN 并将 VO 附加到名称。
例如,
表名:FR_ACCOUNT_MST
要生成的POJO:accountMstVO
谢谢, 瓦伦
【问题讨论】:
标签: hibernate naming-conventions hibernate-mapping pojo
我想知道在使用 hibernate 生成 POJO 时如何更改它的名称。
我的表有一个命名约定:FR_ 和 TRN_。 在生成 POJO 时,我希望删除 FR 和 TRN 并将 VO 附加到名称。
例如,
表名:FR_ACCOUNT_MST
要生成的POJO:accountMstVO
谢谢, 瓦伦
【问题讨论】:
标签: hibernate naming-conventions hibernate-mapping pojo
对,你必须扩展 DelegatingReverseEngineeringStrategy 类(hibernate-tool.jar lib)并覆盖 tableToClassName 方法。
下面的代码会将 FR_ACCOUNT_MST 重命名为 FR_ACCOUNT_MSTVO。
我让你使用一些正则表达式来获得想要的结果。
变量className包含包+类名(即com.mycompany.project.hibernate.FR_ACCOUNT_MST)
来源:http://www.cereslogic.com/pages/2008/08/05/hibernate-tools-tips-for-reverse/
package com.altenor.coffre.generated;
import org.hibernate.cfg.reveng.DelegatingReverseEngineeringStrategy;
import org.hibernate.cfg.reveng.ReverseEngineeringStrategy;
import org.hibernate.cfg.reveng.TableIdentifier;
public class CoffreReverseEngineeringStrategy extends DelegatingReverseEngineeringStrategy {
public CoffreReverseEngineeringStrategy(ReverseEngineeringStrategy delegate) {
super(delegate);
}
//add Base before class name
public String tableToClassName(TableIdentifier tableIdentifier) {
String className = super.tableToClassName(tableIdentifier);
return className+"VO";
}
}
【讨论】:
或者您可以通过在 hibernate.reveng.xml 文件中添加每个 pojo 的名称来实现:
<hibernate-reverse-engineering>
<table-filter match-schema="CO" match-name="FR_ACCOUNT_MST"/>
<table name="FR_ACCOUNT_MST" schema="CO" class="com.bonables.co.hibernate.pojo.accountMstVO" />
</hibernate-reverse-engineering>
【讨论】:
我假设您正在使用 Hibernate Tool 从数据库元数据逆向工程领域模型类的能力。在这种情况下,您可能希望按照 here 的说明实现自定义 org.hibernate.cfg.reveng.ReverseEngineeringStrategy。
【讨论】: