Обратный инжиниринг hibernate для включения свойства @Transient
Я пытаюсь включить следующее
private org.springframework.web.multipart.commons.CommonsMultipartFile photo;
@Transient
public CommonsMultipartFile getPhoto() {
return photo;
}
public void setPhoto(CommonsMultipartFile photo) {
this.photo = photo;
}
в моем классе pojo, сгенерированном из таблицы базы данных.
Я изучал, чтобы найти способ упомянуть дополнительный код класса в метатеге, как показано ниже
http://www.scribd.com/doc/23123635/30/Guiding-the-reverse-engineering-process
но это не позволяет добавить свойство переменной фото.
Пожалуйста, предложите способ, как я могу сделать это в местьем. Чтобы этот код включался при каждом запуске hbm2java.
Заранее спасибо!
2 ответа
Вы можете добиться такого пользовательского кода с помощью шаблонов мести. Если вы откроете hibernate-tools.jar
вы найдете файлы.ftl в pojo
папка. Вам нужно переопределить их, чтобы поставить пользовательский код.
шаги:
Если вы используете Maven, поместите это под
componentProperties
для цели hbm2java:<templatepath>src/main/resources/reveng.templates/</templatepath> <filepattern>*.java</filepattern>
Создайте
revenge.templates/pojo
папка под ресурсами. Убедитесь, что имя папки всегдаpojo
в противном случае переопределения не обнаруживаются.Создайте
pojo.ftl
файл и скопировать содержимое изpojo.ftl
файл присутствует в банке. Добавьте все операторы импорта в этом файле.Аналогично, следуйте другим файлам, чтобы узнать, куда именно вы хотите поместить пользовательский код.
Насколько я знаю, нет никакого способа указать это ни в файле Сборка мест или в пользовательском ReverseEngineeringStrategy.
Способ решения этой проблемы заключается в расширении всех сгенерированных базовых классов POJO с помощью пользовательского слоя классов и добавлении в него временных свойств и специальных режимов поведения. Не совсем то, что вы просили, но он работает хорошо и обеспечивает гибкость, не жертвуя преимуществами генерации кода.