web-dev-qa-db-fra.com

Comment configurer le nom de schéma par défaut dans la configuration JPA?

J'ai trouvé que dans le fichier de configuration hibernate nous pouvions configurer le paramètre hibernate.default_schema:

<hibernate-configuration> 
   <session-factory>
      ...
      <property name="hibernate.default_schema">myschema</property>
      ...
   </session-factory>
</hibernate-configuration>

Maintenant, j'utilise JPA et je veux faire la même chose. Sinon, je dois ajouter le paramètre schema à chaque annotation @Table comme:

@Entity
@Table (name = "projectcategory", schema = "SCHEMANAME")
public class Category implements Serializable { ... }

Si je comprends bien, ce paramètre devrait figurer quelque part dans cette partie de la configuration:

<bean id="domainEntityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="persistenceUnitName" value="JiraManager"/>
    <property name="dataSource" ref="domainDataSource"/>
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
            <property name="generateDdl" value="false"/>
            <property name="showSql" value="false"/>
            <property name="databasePlatform" value="${hibernate.dialect}"/>
        </bean>
    </property>
</bean>

<bean id="domainDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
    <property name="driverClass" value="${db.driver}" />
    <property name="jdbcUrl" value="${datasource.url}" />
    <property name="user" value="${datasource.username}" />
    <property name="password" value="${datasource.password}" />
    <property name="initialPoolSize" value="5"/>
    <property name="minPoolSize" value="5"/>
    <property name="maxPoolSize" value="15"/>
    <property name="checkoutTimeout" value="10000"/>
    <property name="maxStatements" value="150"/>
    <property name="testConnectionOnCheckin" value="true"/>
    <property name="idleConnectionTestPeriod" value="50"/>
</bean>

... mais je ne trouve pas son nom dans google. Des idées?

55
Roman

Je ne connais pas la propriété JPA pour cela non plus. Mais vous pouvez simplement ajouter la propriété Hibernate (en supposant que vous utilisez Hibernate en tant que fournisseur) en tant que

...

<property name="hibernate.default_schema" value="myschema"/>

...

Hibernate devrait le comprendre

71
bert

Juste pour gagner du temps pour les personnes qui viennent à la publication (comme moi, qui recherche le type de configuration Spring et souhaite que votre nom de schéma soit défini par une source externe (fichier de propriétés)). La configuration fonctionnera pour vous est

<bean id="domainEntityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="persistenceUnitName" value="JiraManager"/>
    <property name="dataSource" ref="domainDataSource"/>
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
            <property name="generateDdl" value="false"/>
            <property name="showSql" value="false"/>
            <property name="databasePlatform" value="${hibernate.dialect}"/>
        </bean>
    </property>
    <property name="jpaProperties">
       <props>
            <prop key="hibernate.hbm2ddl.auto">none</prop>
            <prop key="hibernate.default_schema">${yourSchema}</prop>
       </props>
</property>

</bean>

Ps: Pour le fichier hibernate.hdm2ddl.auto, vous pouvez regarder dans le post les valeurs possibles de Hibernate hbm2ddl.auto et ce qu’elles font? J'avais l'habitude de définir create-update, parce que c'est pratique. Cependant, en production, je pense qu'il est préférable de prendre le contrôle du ddl, je prends donc ce que ddl génère la première fois, enregistrez-le plutôt que de le laisser créer et mettre à jour automatiquement.

34
sernle

Afin d'éviter les schémas de codage en dur dans JPA Entity Java Les classes dans lesquelles nous avons utilisé le fichier de mappage orm.xml = Java Application EE déployée dans OracleApplicationServer10 (OC4J, Orion).) se trouve dans model.jar/META-INF/ainsi que dans persistence.xml. Le fichier de mappage orm.xml est référencé à partir de peresistence.xml avec la balise

...
  <persistence-unit name="MySchemaPU"  transaction-type="JTA">
    <provider>
     <mapping-file>META-INF/orm.xml</mapping-file>
...

Le contenu du fichier orm.xml est cité ci-dessous:

<?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">
 <persistence-unit-metadata>

  <persistence-unit-defaults>
   <schema>myschema</schema>
  </persistence-unit-defaults>
 </persistence-unit-metadata>
</entity-mappings>
26
granit

Pour les autres utilisateurs de spring-boot, Java,

J'ai défini la valeur du schéma dans application.properties

spring.jpa.properties.hibernate.dialect=...
spring.jpa.properties.hibernate.default_schema=...
13
WengKit Lei

Pour ceux qui utilisent les dernières versions de Spring Boot, cela aidera:

.Propriétés:

spring.jpa.properties.hibernate.default_schema=<name of your schema>

.yml:

spring:
    jpa:
        properties:
            hibernate:
                default_schema: <name of your schema>
0
S.Dayneko