【发布时间】:2014-07-22 22:05:59
【问题描述】:
我正在使用休眠逆向工程并试图让我的时间戳映射到 JodaTime 类型。
我已经正确设置了我的 hibernate.reveng.xml 文件
<sql-type jdbc-type="TIMESTAMP" hibernate-type="org.joda.time.contrib.hibernate.PersistentDateTime" not-null="true"></sql-type>
问题是,当我运行 rev-eng 进程时,我的 Java 类也会将成员创建为 PersistentDateTime 对象,但我不希望这样,因为它们不可用。我需要 java 对象是 org.joda.time.DateTime
所以我尝试创建自定义工程策略
public class C3CustomRevEngStrategy extends DelegatingReverseEngineeringStrategy {
public C3CustomRevEngStrategy(ReverseEngineeringStrategy res) {
super(res);
}
public String columnToHibernateTypeName(TableIdentifier table, String columnName, int sqlType, int length, int precision, int scale, boolean nullable, boolean generatedIdentifier) {
if(sqlType==Types.TIMESTAMP) {
return "org.joda.time.DateTime";
} else {
return super.columnToHibernateTypeName(table, columnName, sqlType, length, precision, scale, nullable, generatedIdentifier);
}
}
}
我的想法是休眠映射文件将获取 hibernate.reveng.xml 文件设置,而 java 对象将从自定义策略文件获取设置...但事实并非如此。映射文件和对象都是“org.joda.time.DateTime”类型,这不是我想要的。
我怎样才能实现我的目标?另外,我没有使用注释。
- 休眠 3.6
- JodaTime 2.3
- JodaTime-Hibernate 1.3
谢谢
编辑:明确问题是什么
在逆向工程之后,这就是我在映射文件和 POJO 类中得到的内容
<property name="timestamp" type="org.joda.time.contrib.hibernate.PersistentDateTime">
private PersistentDateTime timestamp;
作为 POJO 属性,PersistentDateTime 对我来说毫无用处,因为我不能用它做任何事情,例如时间操作或任何事情。所以这就是我在逆向工程后想要的
<property name="timestamp" type="org.joda.time.contrib.hibernate.PersistentDateTime">
private org.joda.time.DateTime timestamp;
使用下面建议的 Jidira 库给我同样的结果,一个我不能使用的 POJO。
【问题讨论】:
-
如果我的回答不能解决您的问题,请告诉我。它可能只需要一些调整
标签: java hibernate reverse-engineering jodatime hibernate-tools