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