yml mvc localcontainerentitymanagerfactorybean example java hibernate spring configuration jpa

java - mvc - spring jpa hibernate



¿Cómo configurar el nombre de esquema predeterminado en la configuración de JPA? (4)

No sé de la propiedad JPA para esto tampoco. Pero podría agregar la propiedad Hibernate (suponiendo que use Hibernate como proveedor) como

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

Hibernate debería recoger eso

Descubrí que en el archivo de configuración de hibernación podemos configurar el parámetro hibernate.default_schema :

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

Ahora estoy usando JPA y quiero hacer lo mismo. De lo contrario, tengo que agregar el schema parámetro a cada anotación @Table como:

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

Como entiendo, este parámetro debe estar en algún lugar de 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 encontrar su nombre en google. ¿Algunas ideas?


Para evitar el esquema de hardcoding en las clases de JPA Entity Java utilizamos el archivo de mapeo orm.xml en la aplicación Java EE implementada en OracleApplicationServer10 (OC4J, Orion). Se establece en model.jar / META-INF / y persistence.xml. El archivo de asignación orm.xml se referencia desde peresistence.xml con etiqueta

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

El contenido de 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>


Para otros que usan Spring-boot, configuración basada en Java,

Establecí el valor del esquema en application.properties

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


Solo para ahorrar tiempo a las personas que llegan al puesto (como yo, que busca el tipo de configuración de Spring y desea que su nombre de esquema sea establecido por una fuente externa (archivo de propiedad)). La configuración funcionará para usted

<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: Para hibernate.hdm2ddl.auto, podría buscar en la publicación hibernate hbm2ddl.auto valores posibles y qué hacen? He usado para establecer la actualización de creació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.