2010-04-29 38 views
44

me encontré con que en el archivo de configuración de hibernación podríamos establecer parámetros hibernate.default_schema:¿Cómo configurar el nombre de esquema predeterminado en la configuración de JPA?

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

Ahora estoy usando la APP y quiero hacer lo mismo. De lo contrario tengo que añadir el parámetro schema a cada anotación @Table como:

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

Según entiendo este parámetro debe estar en algún lugar en esta parte de la configuración:

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

... pero no puedo encuentra su nombre en google ¿Algunas ideas?

Respuesta

62

No sé de la propiedad JPA para esto tampoco. Sin embargo, usted podría añadir la propiedad de hibernación (suponiendo que el uso de Hibernate como proveedor) como

... 

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

... 

Hibernate debe recoger hasta que

+2

debe añadirse a '' sección en la unidad persistente en 'persistencia. xml'. – Roman

+2

Lo sentimos, no hemos visto que no tenga persistence.xml pero use Spring para configurar Hibernate/JPA. Intentaré agregar esto debajo de HibernateJpaVendorAdapter como una propiedad. Quizás incluso sin el "hibernate". delante del nombre. – bert

+1

El problema aquí es que no puedo usar una propiedad como en los archivos de Spring, como $ {jdbc.schema} o similar. – Chexpir

25

Con el fin de evitar hardcoding esquema de las clases Java APP Entidad se utilizó la cartografía orm.xml archivo en la aplicación Java EE implementada en OracleApplicationServer10 (OC4J, Orion). Se establece en model.jar/META-INF/y persistence.xml. orm.xml archivo de asignación se hace referencia desde peresistence.xml con la etiqueta

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

contenido del archivo orm.xml se cita a continuación:

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

Preferiría esta solución sobre las demás, ya que es estándar y no específica de la implementación. – Isaac

+0

Obtuve parseexceptino - necesario para eliminar el elemento del proveedor de la unidad de persistencia META-INF/orm.xml ... –

31

sólo para ahorrar el tiempo de las personas que acuden al poste (como yo , quien busca el tipo de configuración Spring y desea que su nombre de esquema sea establecido por una fuente externa (archivo de propiedad)). La configuración funcione para usted es

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

PD: Para el hibernate.hdm2ddl.auto, usted podría mirar en el puesto Hibernate hbm2ddl.auto possible values and what they do? he utilizado para fijar crear-actualización, porque es conveniente. Sin embargo, en producción, creo que es mejor tomar el control del ddl, así que tomo cualquier ddl que genere la primera vez, lo guardo, en lugar de dejar que se cree y actualice automáticamente.

+1

¡Y eres un salvador amigo mío! :) –

6

Para otras personas que utilizan resortes de arranque, configuración basada en Java,

que establezca el valor de esquema en application.properties

spring.jpa.properties.hibernate.dialect=... 
spring.jpa.properties.hibernate.default_schema=... 
Cuestiones relacionadas