为LocalSessionFactoryBean mappingLocations指定正则表达式

时间:2015-04-09 14:56:45

标签: java regex spring hibernate configuration

在我的应用程序中,我已指定以下配置,以自动获取类路径中特定文件夹下的所有HBM文件。

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
  <property name="mappingLocations">
    <list>
      <value>classpath:hbms/**/*.hbm.xml</value>
    </list>
  </property>
</bean>

现在,对于新要求,需要使用特定于数据库的命名查询创建多个HBM文件。 HBM文件名将采用模式test.DB.hbm.xml。例如, test.oracle.hbm.xml test.db2.hbm.xml 。除了这些之外,还有旧的常规HBM文件(用于映射到表),名称格式如table1.hbm.xml,table2.hbm.xml等也存在于同一文件夹中。

使用上述模式,由于新hbm文件中的命名查询重复,因此文件的hibernate加载失败(因为所有这些文件中的名称都相同)。

现在要求加载常规HBM文件以及特定于DB的HBM文件。是否可以通过使用如下的正则表达式来实现这一点?

classpath:hbms/**/*.(.${dbType}).hbm.xml

在上面的示例中, dbType 可用作Spring环境属性。我对这些更改的尝试导致没有加载任何HBM文件(包括旧文件)。

我是否正常使用正则表达式,或者是否无法通过XML配置执行此操作?

谢谢。

1 个答案:

答案 0 :(得分:0)

您有两种选择:

  1. 您可以将每个特定于数据库的配置文件存储在单独的文件夹中,然后您的配置如下所示:

    classpath:hbms/**/${dbType}/*.hbm.xml
    
  2. 您可以让他们按照您提供的模式进行操作,但将配置更改为

    classpath:hbms/**/*${dbType}.hbm.xml
    
  3. 要加载常用文件,您需要重命名它们以包含您可以匹配的内容,例如:

    one.hbm.xml
    

    成为:

    common-one.hbm.xml
    

    然后配置可能如下所示:

        classpath:hbms/**/common-*.hbm.xml
        classpath:hbms/**/*${dbType}.hbm.xml