2016-04-13 10 views
0

Wir konfigurieren unsere Session Factory-Bean in XML. Der Standardsitzungsname wird aus einer Eigenschaftendatei gelesen, die sich im Ressourcenordner des Codes befindet. Zu einem neuen Zweck muss ich in der Lage sein, die Standardschemaeigenschaft zur Laufzeit in etwas anderes zu ändern. Ich kann nicht herausfinden, wie.Wie kann ich die Standardschemaeinstellung von Hibernate SessionFactory zur Laufzeit ändern?

Die Sitzung Fabrik wird in der XML-Verdrahtung wie folgt erstellt:

<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 ... 

Ich dachte, ich könnte die Sitzung Fabrik aus Spring Kontext ziehen, bieten vielleicht eine Eigenschaften-Klasse (ich hoffte) überschreiben die Standardsitzung Eigentum und nichts anderes, und dann weiter glücklich auf meinem Weg.

Leider, wenn ich versuche, die Session Factory Bean aus dem Kontext zu bekommen, ist es vom Typ SessionFactoryImpl und nicht AnnotationSessionFactoryBean. Dies bedeutet, dass die Methode setHibernateProperties() für mich nicht verfügbar ist.

Ich bin mir nicht sicher, ob ich ALTER SESSION entweder anrufen kann. Da die Sitzungsfactory von unseren DAO-Klassen in einer Bibliothek abgerufen wird, habe ich keine einfache Möglichkeit, die Sitzungsfactory mit dem erforderlichen Code zu umhüllen.

Irgendwelche Ideen?

Antwort

0

Erstellen Sie mehrere JPA-Konfigurationsdateien, eine für jede Umgebung, die Sie unterstützen möchten, und importieren Sie sie dann in Ihre Spring-Konfiguration.

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

Für mich ist es eine Datei für prod, zu testen und für jeden Benutzer, durch die environment.name System-Eigenschaft, die richtige JPA Konfiguration geladen wird.