복붙노트

[SPRING] 다중 데이터베이스 스키마를 사용하는 JPA

SPRING

다중 데이터베이스 스키마를 사용하는 JPA

JPA / Spring을 사용하여 특정 문제에 약간의 문제가 있습니다.

엔터티에 스키마를 어떻게 동적으로 할당 할 수 있습니까?

스키마 AD에 속하는 TABLE1과 BD에 속하는 TABLE2가 있습니다.

@Entity
@Table(name = "TABLE1", schema="S1D")
...

@Entity
@Table(name = "TABLE2", schema="S2D")
...

스키마는 환경 (Dev / Acc / Prd)에 따라 달라 지므로 주석 속성에 하드 코드되지 않을 수 있습니다. (수락 있음) 스키마는 S1A 및 S2A입니다.

이것을 어떻게 할 수 있습니까? 다음과 같은 일종의 자리 표시자를 지정할 수 있습니까?

@Entity
@Table(name = "TABLE1", schema="${schema1}")
...

@Entity
@Table(name = "TABLE2", schema="${schema2}")
...

그래서 스키마는 환경에있는 속성 파일을 기반으로 대체됩니까?

건배

해결법

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

    1.나는 동일한 문제를 해결하기 위해 persistence.xml을 사용하여 해결했다. dbm Shema를 선언 한 내에서 필요한 orm.xml 파일을 참조했다.

    나는 동일한 문제를 해결하기 위해 persistence.xml을 사용하여 해결했다. dbm Shema를 선언 한 내에서 필요한 orm.xml 파일을 참조했다.

    <persistence
    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"
    version="2.0" >
    <persistence-unit name="schemaOne">
        . . .
        <mapping-file>ormOne.xml</mapping-file>
        . . .
    </persistence-unit>
    
    <persistence-unit name="schemaTwo">
        . . .
        <mapping-file>ormTwo.xml</mapping-file>
        . . .
     </persistence-unit>
    </persistence>
    

    이제 특별한 스키마를위한 EntityManagerFactory를 생성 할 수있다.

    EntityManagerFactory emf = Persistence.createEntityManagerFactory("schemaOne");
    
  2. ==============================

    2.배포시 2 개의 orm.xml 파일을 가지고있는 경우 한 가지 할 수 있습니다. 하나는 schema1 용이고 다른 하나는 schema2 용이고 그런 다음 persistence.xml에는 2 개의 영속성 단위가 정의되어 있습니다. 주석을 넣는 것은 스키마와 같은 것을 바꿀 필요가 있다면 반 패턴입니다.

    배포시 2 개의 orm.xml 파일을 가지고있는 경우 한 가지 할 수 있습니다. 하나는 schema1 용이고 다른 하나는 schema2 용이고 그런 다음 persistence.xml에는 2 개의 영속성 단위가 정의되어 있습니다. 주석을 넣는 것은 스키마와 같은 것을 바꿀 필요가 있다면 반 패턴입니다.

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

    3.다음을 시도하십시오.

    다음을 시도하십시오.

    puplic class MyClass {
      public static final String S1D="S1D";
      public static final String S2D="S2D";
    }
    
    @Entity
    @Table(name = "TABLE1", schema=MyClass.S1D)
    ...
    
    @Entity
    @Table(name = "TABLE2", schema=MyClass.S2D)
    ...
    
  4. ==============================

    4.context.xml의 두 개의 DataSource 선언 (각 스키마 당 하나씩)을 가질 수 있으며이 데이터 소스를 사용하여 두 개의 지속성 단위를 정의 할 수 있습니다. context.xml은 다른 환경의 응용 프로그램 서버에서 다를 수 있습니다.

    context.xml의 두 개의 DataSource 선언 (각 스키마 당 하나씩)을 가질 수 있으며이 데이터 소스를 사용하여 두 개의 지속성 단위를 정의 할 수 있습니다. context.xml은 다른 환경의 응용 프로그램 서버에서 다를 수 있습니다.

  5. ==============================

    5.데이터 소스를 만들 때 다른 스키마를 사용하도록 연결을 초기화 할 수 있습니다

    데이터 소스를 만들 때 다른 스키마를 사용하도록 연결을 초기화 할 수 있습니다

    e. 감독

    weblogic / oracle에서 JDBC 풀에 대한 기본 스키마 지정

  6. ==============================

    6.주석 인수는 최종적이어야하므로 런타임에 변경할 수 없습니다.

    주석 인수는 최종적이어야하므로 런타임에 변경할 수 없습니다.

  7. from https://stackoverflow.com/questions/1301399/jpa-using-multiple-database-schemas by cc-by-sa and MIT license