2016-09-21 2 views
0

Ich habe eine Hibernate/Spring 4-Anwendung, in der das Standardschema der Entitätsklassen bereits konfiguriert ist, z. Sie enden als testschema.table oder prodschema.table.Festlegen des Schemas einer Hibernate-Entität zusätzlich zur Standardschemakonfiguration

Es gibt jedoch eine andere Entitätsklasse, die ein eigenes konfigurierbares Schema benötigt, z. Nur diese Entität muss testschema2.anothertable oder prodschema2.anothertable zugeordnet werden.

Nizza wäre so etwas wie dieses:

@Entity 
@Table(name="anothertable", schema = "${db.AntherEntitySchema}") 
public class AnotherEntity { 
    // .. 
} 

wo das Schema aus den Eigenschaften injiziert wird Datei, aber ein solches Feature scheint nur mit dem @Value Anmerkung zu arbeiten. Irgendeine Idee, wie man vorgeht?

Antwort

0

Wir lösten es durch dieses applicationContextPersistence.ctx.xml

<bean id="entityManagerFactory" 
     class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="persistenceXmlLocation" 
       value="classpath:META-INF/persistence-${env}.xml" /> 
    <!-- .. --> 
</bean> 

wo Frühling die $ {} Ausdruck von einer Eigenschaftendatei ersetzen.

Wir haben dann eine Persistenz-dev.xml usw., die eine spezifische ORM-dev.xml Features:

<?xml version="1.0" encoding="UTF-8"?> 
<persistence 
    version="2.0" 
    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"> 
    <persistence-unit name="fooUnit" transaction-type="RESOURCE_LOCAL"> 
     <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> 
     <mapping-file>META-INF/orm-dev.xml</mapping-file> 
    </persistence-unit> 
    <!-- .. --> 
</persistence> 

Die ORM-dev.xml ist nun verantwortlich für die Entitätszuordnung:

<?xml version="1.0" encoding="UTF-8" ?> 

<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm  
    http://java.sun.com/xml/ns/persistence/orm_1_0.xsd" 
    version="1.0"> 

    <description> XML Mapping file</description> 

    <package>foo.server.model</package> 

    <entity class="AnotherEntity"> 
     <table schema="testschema2" name="anothertable" /> 
     <attributes> 
      <!-- .. --> 
     </attributes> 
    </entity> 
</entity-mappings> 

Schließlich haben wir die Mapping-Annotationen vom AnotherEntity POJO entfernt, da dieses jetzt über die Datei orm-dev.xml gemappt ist. Die anderen enitity Klassen behielten ihre Anmerkungen bei.

Hinweis: Wir verwenden die Spring Tool Suite von Eclipse. Diese IDE erwartet eine persistence.xml. Um eine Fehlermeldung loszuwerden, haben wir eine minimale persistence.xml verwendet, damit wir uns nicht an die IDE-Option erinnern müssen, die den Validator deaktiviert.

Verwandte Themen