Я использую обратный инжиниринг в спящем режиме и пытаюсь сопоставить свои временные метки с типом 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
- ДжодаТайм 2.3
- JodaTime-Спящий режим 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, который я не могу использовать.