我在我的应用程序中使用spring + hibernate。 我需要映射由hibernate注释注释的实体。 我有这个配置。
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="annotatedClasses">
<list>
<value>com.example.repositoryComment.Model1</value>
<value>com.example.repositoryControlUpload.Model2</value>
<value>com.example.repositoryCycleTicketSummary.Model3</value>
</list>
</property>
我希望实体配置保留在另一个文件中。 Exemplo:
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="annotatedClasses">
<list>
filesThatContainsModels
</list>
</property>
这个类(Model1,Model2,Model3)由hibernate注释。 我没有使用packagesToScan,因为我的热身需要很快。
有配置方法只能打包,但不能使用packagesToScan?
由于
答案 0 :(得分:2)
构建时的一个选择是利用注释处理。
基本上,自定义注释处理器将在构建时扫描源文件,并生成所有发现使用@Entity
注释的文件的列表。它将此类列表与描述静态SessionFactory
配置的外部属性文件一起使用,并将{spring}文件生成为applicationContext-persistence.xml
。
然后,您只需确保主applicationContext.xml
为运行时导入该文件。
另一种替代方法实际上是使用packagesToScan
属性。但是,不是做许多开发人员所做的事情并将其指向应用程序的根包,而是为属性提供一个更具限制性的包列表,这些包完全代表它应该看起来的位置,从而帮助它避免检查不必要的类。例如:
<property name="packagesToScan">
<array>
<value>com.company.application.feature1.persistence</value>
<value>com.company.application.feature2.persistence</value>
...
</array>
</property>
但老实说,我认为你过度优化了。如果你有这种类型的引导程序性能问题,那么这里必然会出现其他问题让你担心。
我已经开发了一个包含数万个类文件的单片应用程序,其中扫描指向应用程序的包根,并且它不需要花费几秒钟来引导Hibernate持久化类。< / p>