реинжиниринг 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

но это не позволяет добавить фото переменной свойства.

Пожалуйста, предложите способ, как я могу сделать это в reveng.xml, чтобы этот код включался при каждом запуске hbm2java.

Заранее спасибо!


person nightfly    schedule 19.04.2011    source источник


Ответы (2)


Вы можете получить такой пользовательский код, используя шаблоны reveng. Если вы откроете hibernate-tools.jar, вы найдете файлы .ftl в папке pojo. Вам нужно переопределить их, чтобы поместить собственный код.

Шаги:

  1. Если вы используете maven, поместите это под componentProperties для цели hbm2java:

    <templatepath>src/main/resources/reveng.templates/</templatepath>
    <filepattern>*.java</filepattern>
    
  2. Создайте папку revenge.templates/pojo под ресурсами. Убедитесь, что имя папки всегда pojo, иначе переопределения не будут обнаружены.

  3. Создайте файл pojo.ftl и скопируйте содержимое из файла pojo.ftl, находящегося в банке. Добавьте все операторы импорта в этот файл.

  4. Точно так же следуйте за другими файлами, чтобы узнать, где именно вы хотите поместить пользовательский код.

person rdk    schedule 13.06.2011
comment
@DarthJDG Спасибо, теперь, кажется, работает то, что я сделал, я просто включил переменную свойства в код метакласса, и хотя парсер eclipse показал ошибку xml ... сгенерированный объект имел метод Transient и свойство как . Спасибо! - person nightfly; 21.07.2011
comment
@nightfly На самом деле это ответ rdk, я только что исправил форматирование в его посте. - person DarthJDG; 21.07.2011

Насколько я знаю, нет способа указать это ни в reveng.xml, ни в пользовательской ReverseEngineeringStrategy.

Способ, которым я решаю эту проблему, заключается в расширении всех моих сгенерированных базовых классов POJO с помощью пользовательского слоя класса и добавлении туда переходных свойств и специального поведения. Не совсем то, о чем вы просили, но работает хорошо и обеспечивает гибкость без ущерба для преимуществ генерации кода.

person Shane    schedule 04.06.2011