Можно ли переопределить свойства persistence.xml через конфигурацию? - PullRequest
2 голосов
/ 19 января 2010

JBOSS 5.1 / EJB 3 / JPA / MySQL

Для разработки мы указываем "hibernate.hbm2ddl.auto" как "update".Это делается в нескольких файлах persistence.xml, встроенных в несколько jar-файлов в ухо.

Для производства мы хотели бы переопределить это, указав «validate».

Можно ли это сделать с помощью конфигурациивне уха?

(я знаю, что это можно сделать в коде в неуправляемой среде)

Ответы [ 3 ]

4 голосов
/ 19 января 2010

Для JBoss 5.1 необходимо отредактировать следующий файл:

<jboss_dir>/server/default/deployers/ejb3.deployer/META-INF/jpa-deployers-jboss-beans.xml

<bean name="PersistenceUnitDeployer" class="org.jboss.jpa.deployers.PersistenceUnitDeployer">
      <property name="defaultPersistenceProperties">
         <map keyClass="java.lang.String" valueClass="java.lang.String">
            <entry>
               <key>hibernate.transaction.manager_lookup_class</key>
               <value>org.hibernate.transaction.JBossTransactionManagerLookup</value>
            </entry>                
            <entry>
               <key>hibernate.hbm2ddl.auto</key>
               <value>validate</value>
            </entry>
            <entry>
               <key>hibernate.cache.provider_class</key>
               <value>org.hibernate.cache.HashtableCacheProvider</value>
            </entry>                
            <entry>
               <key>hibernate.jndi.java.naming.factory.initial</key>
               <value>org.jnp.interfaces.NamingContextFactory</value>
            </entry>
            <entry>
               <key>hibernate.jndi.java.naming.factory.url.pkgs</key>
               <value>org.jboss.naming:org.jnp.interfaces</value>
            </entry>
            <entry>
               <key>hibernate.bytecode.use_reflection_optimizer</key>
               <value>false</value>
            </entry>
            <!-- I don't think this is honored, but EJB3Deployer uses it -->
            <entry>
               <key>hibernate.bytecode.provider</key>
               <value>javassist</value>
            </entry>
         </map>
      </property>
</bean>

Эти свойства можно редактировать в следующем файле в JBoss 4.2:

<jboss_dir>/server/default/deploy/ejb3.deployer/META-INF/persistence.properties

1 голос
/ 19 января 2010

Для автономного режима гибернации это легко сделать, когда вы создаете объект персистентности, вы можете передать ему хэш-таблицу пар ключ-значение. В вашем случае ключ "hibernate.hbm2dll.auto" и значение "validate" ...

private Map properties = Util.newMap();

public EntityManagerFactory getEntityManagerFactory() {
    if (emf == null || !emf.isOpen()) {
        emf = Persistence.createEntityManagerFactory(PU, properties);
    }
    return emf;
}

public EntityManager getEntityManager() {
    if (em == null || !em.isOpen()) {
        em = getEntityManagerFactory().createEntityManager();
    }
    return em;
}

Затем мой класс конфигурации должен заполнить Карту объектами из моего пользовательского файла конфигурации.

Я не верю, что вы можете изменить уже открытый экземпляр EntityManager. И хотя вы можете передать EntityManager карту, я обнаружил, что она игнорирует эти свойства и обратила внимание только тогда, когда вы сделали это с фабрики ...

0 голосов
/ 29 июля 2015

Для Wildfly я бы порекомендовал вашему persistence.xml вообще не иметь свойства hibernate.hbm2ddl.auto.

Вместо этого в конфигурации запуска для разработки, в которой передаются аргументы виртуальной машины, добавьте -Dhibernate.hbm2ddl.auto=update в список.

Вы также можете иметь -Dhibernate.hbm2ddl.auto=validate для своих производственных сред, но, по крайней мере, это сохраняет изменения вне вашего приложения.

...