2016-04-13 1 views
0

Nous configurons notre bean Session Factory en XML. Le nom de session par défaut est lu à partir d'un fichier de propriétés situé dans le dossier de ressources du code. Pour un nouveau but, je dois pouvoir changer la propriété de schéma par défaut en quelque chose d'autre à l'exécution. Je ne peux pas comprendre comment.Comment puis-je modifier le paramètre de schéma par défaut de SessionFactory de Hibernate lors de l'exécution?

L'usine de session est créée dans le câblage XML comme suit:

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.default_schema">${oracle.default_schema}</prop> 
      <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop> 
      <prop key="hibernate.generate_statistics">false</prop> 
      ... other properties ... 
     </props> 
    </property> 
    ... lots of mapping files and annotated classes ... 

Je pensais que je pouvais tirer l'usine de la session hors du contexte du printemps, peut-être fournir une classe Properties (j'espérais) outrepasser la session par défaut propriété et rien d'autre, et puis continuer sur mon chemin avec bonheur.

Malheureusement, lorsque j'essaie de sortir le bean factory de son contexte, il est de type SessionFactoryImpl et non AnnotationSessionFactoryBean. Cela signifie que la méthode setHibernateProperties() n'est pas disponible pour moi.

Je ne suis pas sûr si je peux appeler ALTER SESSION non plus. Étant donné que la classe de session est obtenue par nos classes DAO dans une bibliothèque, je n'ai pas un moyen facile d'encapsuler l'atelier de session avec le code nécessaire.

Des idées?

Répondre

0

Créez plusieurs fichiers de configuration JPA, un pour chaque environnement que vous voulez prendre en charge, puis importez-le dans votre configuration de source.

<import resource="classpath:services-environment-${environment.name}.xml"/> 

Pour moi, il y a un fichier pour prod, test, et pour chaque utilisateur, en définissant la propriété du système environment.name, la configuration JPA correct est chargé.