Подтвердить что ты не робот

Перемещение инструмента Hibernate для создания времени

У меня есть приложение с около 3000 объектов (я его много знаю, но я не могу его изменить). Когда приложение загружается, требуется время Hibernate для выполнения всех инструментов и средств настройки SessionFactory.
Мне было интересно, могу ли я настроить Hibernate для выполнения инструментария на исходных классах во время сборки.
Таким образом, я могу избежать 3000 дополнительных сгенерированных прокси-классов и огромных накладных расходов при запуске приложений.
Я нашел некоторую информацию о инструментах времени сборки Hibernate (org.hibernate.tool.instrument.javassist.InstrumentTask), но неясно, заменит ли это полностью аппаратное обеспечение во время выполнения или обрабатывает механизм выборки свойств ленивого Hibernate.
Любая информация о том, как переместить генератор прокси для создания времени, будет оценена.

4b9b3361

Ответ 1

Да, вы можете. В коде Hibernate есть задача Ant: org.hibernate.tool.instrument.javassist.InstrumentTask.

<target name="instrument" depends="compile">
    <taskdef name="instrument" classname="org.hibernate.tool.instrument.javassist.InstrumentTask">
        <classpath refid="<some-ant-path-including-hibernate-core-jar>"/>
        <classpath path="<your-classes-path>"/>
    </taskdef>

    <instrument verbose="true">
        <fileset dir="<your-classes>">
            <include name="*.class"/>
        </fileset>
    </instrument>
</target>

Я тоже видел некоторые основанные на Maven.

Ответ 2

С Hibernate 4.2.8 вы можете использовать плагин hibernate-enhance-maven:

<build>
    <plugins>
        <plugin>
            <groupId>org.hibernate.orm.tooling</groupId>
            <artifactId>hibernate-enhance-maven-plugin</artifactId>
            <executions>
                <execution>
                    <phase>process-test-resources</phase>
                    <goals>
                        <goal>enhance</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

Ответ 3

Нашел решение в Интернете. Быстро пробовал и, похоже, работал. Надеюсь, я не опаздываю.

Идея заключается в использовании maven-antrun-plugin. Это нужно сделать в вашем pom.xml в разделе build/plugins.

В приведенном ниже примере не забывайте:  - заменить ${hibernate.version} и ${javassist.version} на версию, которую вы используете.  - изменить правила включения, чтобы программа InstrumentTask выполнялась только на вашей сущности

<plugin>
            <artifactId>maven-antrun-plugin</artifactId>
            <executions>
                <execution>
                    <id>Instrument domain classes</id>
                    <configuration>
                        <tasks>
                            <taskdef name="instrument"
                                     classname="org.hibernate.tool.instrument.javassist.InstrumentTask">
                                <classpath>
                                    <path refid="maven.dependency.classpath"/>
                                    <path refid="maven.plugin.classpath"/>
                                </classpath>
                            </taskdef>
                            <instrument verbose="true">
                                <fileset dir="${project.build.outputDirectory}">
                                    <include name="**/model/**/*.class"/>
                                </fileset>
                            </instrument>
                        </tasks>
                    </configuration>
                    <phase>process-classes</phase>
                    <goals>
                        <goal>run</goal>
                    </goals>
                </execution>
            </executions>
            <dependencies>
                <dependency>
                    <groupId>org.hibernate</groupId>
                    <artifactId>hibernate-core</artifactId>
                    <version>${hibernate.version}</version>
                </dependency>

                <dependency>
                    <groupId>javassist</groupId>
                    <artifactId>javassist</artifactId>
                    <version>${javassist.version}</version>
                </dependency>
            </dependencies>
        </plugin>