Добавление аннотаций поиска в Hibernate с помощью инструментов Hibernate

Я использую спящий режим с аннотациями и инструменты гибернации с шаблонами freemarker для автоматической генерации моих классов orm dao.

Теперь я хотел бы реализовать поиск в спящем режиме и поэтому хочу добавить аннотации поиска в спящем режиме к этим классам и свойствам.

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

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

Есть ли способ определить, какие классы и свойства получателя я хотел бы аннотировать инструментами гибернации? Или автоматически аннотировать классы после процесса сборки?

Решения, которые я мог исключить до сих пор:

  • вручную добавлять аннотации после генерации кода -> это должно быть автоматически
  • использование нескольких операторов if в шаблонах freemarker, таких как «if class name == test do add @Index to class» -> это было бы слишком много, особенно с аннотациями для свойств
  • добавить некоторые настройки в файл reveng.xml -> по крайней мере, я не знаю, как это может помочь

Спасибо за вашу помощь!


person Pascal    schedule 25.09.2012    source источник
comment
инструменты, предназначенные только для создания начального правильного сопоставления, так как некоторая ручная настройка всегда будет необходима. Вы должны создать домен один раз, затем передать его в систему управления версиями и управлять им вручную.   -  person Sanne    schedule 04.10.2012
comment
Спасибо, Санне! Я думаю, что, наверное, лучше сделать так.   -  person Pascal    schedule 05.10.2012


Ответы (1)


Как добавить аннотации поиска в спящий режим к классам и свойствам в генерации DAO с помощью задачи инструмента Hibernate.

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

Вам следует расширить класс hibernate POJOExporter, а в расширенном классе добавить весь свой ключ и значение в additionalContext. Эти ключи и значения будут доступны в вашем ftl-файле. А в ftl вы можете принять решение о добавлении аннотации на основе этих ключей и значений. Вот расширенный экспортер pojo

public class JavaDAOExporter extends PojoExporter {

    private static final String JAVA_DAO_FTL = "templates/hibernate/java/dao.ftl";
    private String serviceId;

    public JavaDAOExporter() {
        super();
    }

    public JavaDAOExporter(Configuration cfg, File outputdir, String serviceId, MetaDataDialect metadataDialect) {
        super(cfg, outputdir, metadataDialect);
        this.serviceId = serviceId;
    }

    protected void init() {
        super.init();
        setTemplateName(JAVA_DAO_FTL);
        setFilePattern("{package-name}/dao/{class-name}Dao.java");
    }
    @Override
    protected void exportPersistentClass(Map additionalContext, POJOClass element) {
        //Element is the pojo class,here you can take decision to add annotation in the class,if so add your key&value attributes.Which will be used in ftls.
        additionalContext.put("searchAnnotationForClass", true);
        exportPOJO(additionalContext, element);
    }

    public String getName() {
        return "hbm2javadao";
    }

    protected void exportComponent(Map additionalContext, POJOClass element) {
        // noop - we dont want components
    }

}

И шаблоны вроде

package ${pojo.getPackageName()}.dao;

<#assign classbody>
<#assign declarationName = pojo.importType(pojo.getDeclarationName())>
import org.springframework.stereotype.Repository;

@Repository("${serviceId}.${declarationName}Dao")
//Adding annotation only if searchAnnotationForClass is true
<#if true = searchAnnotationForClass>
@Search("${serviceId})
</#if>
public class ${declarationName}Dao{
//add all your dao template
}

То же самое можно сделать и с недвижимостью.

person Sunil Kumar    schedule 14.07.2015
comment
Спасибо @Sunil. Хотя я не могу протестировать ваше решение, так как больше не работаю с ftl, я уверен, что оно может помочь кому-то с подобными проблемами. - person Pascal; 31.07.2015