有没有办法从.properties文件设置hibernate目录?

时间:2012-12-12 08:22:51

标签: java spring hibernate

我有一个java / spring / hibernate项目,它在同一个数据库服务器上使用两个不同的模式(第二个模式是只读的)。我已经设置了一个database.properties文件来定义两个模式的名称:

default.catalog=testdb1
db2.catalog=testdb2

在ApplicationContext.xml中,我可以从属性文件中设置默认架构:

<property name="hibernateProperties"><props>
        <prop key="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</prop>
        <prop key="hibernate.default_catalog">${default.catalog}</prop>
        <prop key="hibernate.jdbc.batch_size">50</prop>
    </props>

但问题是我目前有一些需要访问两个模式的hibernate对象。为了实现这一点,我使用'catalog'属性来定义hibernate映射的第二个模式,如:

DBObjectXX.hbm.xml

<class name="fi.company.project.object.DBObjectXX" table="TestTableFromDB1">
    <id name="id" type="int">
        <column name="ID"/>
        <generator class="native"/>
    </id>
<join table="TestTableFromDB2" catalog="testdb2"> <-- Change this ..
            <key column="ID" not-null="true" unique="true"/>
            <property name="propertyYY" type="string">
                <column name="PropertyYY" not-null="true"/>
            </property>
</join>
</class>

这样可以正常工作。但是我时不时地需要对模式名称进行检查(例如在测试中),我必须通过搜索&amp;替换每个映射文件。我想要做的是让模式名称来自database.properties文件,如:

<class name="fi.company.project.object.DBObjectXX" table="TestTableFromDB1">
    <id name="id" type="int">
        <column name="ID"/>
        <generator class="native"/>
    </id>
<join table="TestTableFromDB2" catalog="${db2.catalog}"> <-- .. to this or something similar
            <key column="ID" not-null="true" unique="true"/>
            <property name="propertyYY" type="string">
                <column name="PropertyYY" not-null="true"/>
            </property>
</join>
</class>

关于如何做到这一点的任何想法?

1 个答案:

答案 0 :(得分:0)

不幸的是,你不能拥有与两个不同模式相同的SessionFactory。还有其他选择你必须使用两个SessionFactories。

我也不明白为什么你不能使用两个不同的SessionFactories,如果你有两个不同的模式。

如果这是真的,那么你需要认真重新考虑你的应用程序设计和架构...

相关问题