2016-09-21 8 views
0

Hibernate/Spring 4アプリケーションがあります。エンティティクラスのデフォルトスキーマが既に設定されています。それらはtestschema.tableまたはprodschema.tableとしてマップされます。Hibernateエンティティのスキーマをデフォルトのスキーマ設定に追加して設定する

しかし、独自の設定可能なスキーマを必要とする別のエンティティクラスがあります。このエンティティのみをtestschema2.anothertableまたはprodschema2.anothertableにマッピングする必要があります。スキーマがプロパティファイルから注入されたが、そのような機能はのみ@Value注釈で動作するように思われます

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

ニースは、このようなものになるだろう。 どのように進めていいですか?

答えて

0

私たちは、春には、プロパティファイルから$ {}式を置き換えることができ、この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> 

ことによってそれを解決しました。

私たちは、その後、持続-dev.xmlファイルなどの特定のORM-dev.xmlファイルを備えてい:ORM-dev.xmlファイルは、現在のエンティティのマッピングを担当して

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

を:

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

最後に、AnotherEntity POJOからマッピング注釈を削除しました。これは、orm-dev.xmlファイルを介してマップされています。他のenitityクラスは注釈を保持していました。

注:EclipseのSpring Tool Suiteのフレーバーを使用します。このIDEはpersistence.xmlを期待しているので、エラーメッセージを取り除くために、最小限のpersistence.xmlにバリデータを無効にするIDEオプションを覚えておく必要がないようにしました。

関連する問題