복붙노트

[SPRING] JPA 구성에서 기본 스키마 이름을 설정하는 방법은 무엇입니까?

SPRING

JPA 구성에서 기본 스키마 이름을 설정하는 방법은 무엇입니까?

나는 hibernate config 파일에서 우리가 hibernate.default_schema 매개 변수를 설정할 수 있음을 발견했다.

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

이제 JPA를 사용하고 있으며 동일한 작업을 수행하려고합니다. 그렇지 않으면 다음과 같이 각 @Table 주석에 매개 변수 스키마를 추가해야합니다.

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

이 매개 변수는이 구성 부분에 있어야합니다.

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

...하지만 Google에서 그 이름을 찾을 수 없습니다. 어떤 아이디어?

해결법

  1. ==============================

    1.이것에 대한 JPA 속성을 알지 못한다. 그러나 당신은 Hibernate 프라퍼티를 추가 할 수있다 (당신이 Hibernate를 프로 바이더로 사용한다고 가정 할 때).

    이것에 대한 JPA 속성을 알지 못한다. 그러나 당신은 Hibernate 프라퍼티를 추가 할 수있다 (당신이 Hibernate를 프로 바이더로 사용한다고 가정 할 때).

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

    최대 절전 모드가이를 선택해야합니다.

  2. ==============================

    2.게시물에 오는 사람들의 시간을 절약하기 위해서 (Spring 설정 유형을 찾고 스키마 이름을 외부 소스 (속성 파일)로 설정하기를 원하는 사람). 구성이 작동합니다.

    게시물에 오는 사람들의 시간을 절약하기 위해서 (Spring 설정 유형을 찾고 스키마 이름을 외부 소스 (속성 파일)로 설정하기를 원하는 사람). 구성이 작동합니다.

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

    추신 : hibernate.hdm2ddl.auto의 경우, Hibernate hbm2ddl.auto 포스트에있는 값과 그 기능을 살펴볼 수있다. 편리하기 때문에 create-update를 설정하는 데 익숙합니다. 그러나 제작 과정에서 ddl을 제어하는 ​​것이 더 낫다고 생각합니다. 따라서 ddl을 처음 생성 할 때 자동으로 생성 및 업데이트 할 필요없이 가져 와서 저장하십시오.

  3. ==============================

    3.JPA Entity Java Classes의 스키마 하드 코딩을 피하기 위해 OracleApplicationServer10 (OC4J, Orion)에 배치 된 Java EE 애플리케이션에서 orm.xml 매핑 파일을 사용했습니다. 그것은 persistence.xml뿐만 아니라 model.jar / META-INF /에 있습니다. 태그가있는 peresistence.xml에서 orm.xml 파일 매핑이 참조됩니다.

    JPA Entity Java Classes의 스키마 하드 코딩을 피하기 위해 OracleApplicationServer10 (OC4J, Orion)에 배치 된 Java EE 애플리케이션에서 orm.xml 매핑 파일을 사용했습니다. 그것은 persistence.xml뿐만 아니라 model.jar / META-INF /에 있습니다. 태그가있는 peresistence.xml에서 orm.xml 파일 매핑이 참조됩니다.

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

    파일 orm.xml 내용은 다음과 같습니다.

    <?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>
    
  4. ==============================

    4.spring-boot, java 기반 설정을 사용하는 다른 사람들을 위해,

    spring-boot, java 기반 설정을 사용하는 다른 사람들을 위해,

    application.properties에 스키마 값을 설정했습니다.

    spring.jpa.properties.hibernate.dialect=...
    spring.jpa.properties.hibernate.default_schema=...
    
  5. from https://stackoverflow.com/questions/2737420/how-to-set-up-default-schema-name-in-jpa-configuration by cc-by-sa and MIT license