0

SpringとHibernateを使用するWebアプリでは、Hibernate構成がにありますが、META-INF/persistence.xml1つの問題があります。1つはテスト用、もう1つは本番用の2つの異なるデータベースを使用しています。

これが`persistence.xmlです

<persistence xmlns="http://java.sun.com/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
    version="2.0">
    <persistence-unit name="SpringMVCTest" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:/comp/env/jdbc/sqliteDS</jta-data-source>
        <class>pl.meble.taboret.model.UserEntity</class>
        <class>pl.meble.taboret.model.WordList</class>
        <class>pl.meble.taboret.model.WordUnit</class>
        <class>pl.meble.taboret.model.ActivateUserAccountPermaLink</class>
        <class>pl.meble.taboret.model.ResetPasswordPermaLink</class>
        <class>pl.meble.taboret.question.QuestionUnit</class>
        <class>pl.meble.taboret.question.OpenQuestion</class>
        <class>pl.meble.taboret.question.MultipleChoiceQuestion</class>
        <class>pl.meble.taboret.question.WithGapsQuestion</class>
        <class>pl.meble.taboret.question.QuestionList</class>
        <class>pl.meble.taboret.answer.AnswerUnit</class>
        <class>pl.meble.taboret.answer.OpenQuestionAnswer</class>
        <class>pl.meble.taboret.answer.MultipleChoiceQuestionAnswer</class>
        <class>pl.meble.taboret.answer.WithGapsQuestionAnswer</class>
        <exclude-unlisted-classes>false</exclude-unlisted-classes>
        <properties>
            <property name="hibernate.dialect" value="pl.meble.taboret.utils.SQLiteDialect" />
            <property name="hibernate.hbm2ddl.auto" value="update" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.format_sql" value="true" />
            <property name="hibernate.use_sql_comments" value="true" />
            <!-- <property name="hibernate.connection.driver_class" value="${database.driver}"
                /> <property name="hibernate.connection.url" value="${database.url}" /> -->

        <!--     <property name="hibernate.transaction.factory_class" value="org.hibernate.transaction.JTATransactionFactory"/> -->
        <!--<property name="hibernate.transaction.factory_class" value="com.atomikos.icatch.jta.hibernate3.AtomikosJTATransactionFactory"/> -->
        <property name="hibernate.transaction.manager_lookup_class" value="com.atomikos.icatch.jta.hibernate3.TransactionManagerLookup"/>
        </properties>
    </persistence-unit>
</persistence> 

それで、hibernate.properties実行時にの値を変更したり、この値をたとえばJNDIリソースに保存したりすることは可能ですか?

または、条件付きで設定する他の方法がありますhibernate.dialect。たとえば、テストにはSQLite方言を使用し、通常のデプロイにはPostgre方言を使用します。

4

1 に答える 1

4

はい。春に、Beanを使用してエンティティマネージャを定義します。

<bean id="entityManagerFactory" 
   class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">

そのBeanのプロパティを構成できます。

<property name="jpaProperties">
        <props>
            <prop key="hibernate.dialect">${hibernate.dialect}</prop>
        </props>
</property>

${hibernate.dialect}春の財産はどこですか。したがって、プロジェクトの開始時にプロパティを渡すことができます(-Dhibernate.dialectを使用するか、プロパティファイルに配置して次のようにロードします)。<context:property-placeholder-configurer>

于 2012-08-29T12:52:23.453 に答える