在外部文件中hibernate annotatedClasses

时间:2017-03-08 22:23:41

标签: spring hibernate

我在我的应用程序中使用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?

由于

1 个答案:

答案 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>