itsource

순수 JPA에서 네이티브 쿼리에 대한 기본 데이터베이스 스키마를 구성하는 방법은 무엇입니까?

mycopycode 2023. 7. 21. 21:36
반응형

순수 JPA에서 네이티브 쿼리에 대한 기본 데이터베이스 스키마를 구성하는 방법은 무엇입니까?

우리의 상황은 다음과 같습니다.

  • NAT은 엔터프라이즈 애플리케이션의 지속성을 위해 (순수해야 함) JPA를 사용합니다.
  • 성능상의 이유로 인해 여기 저기에서 상당히 복잡한 기본 쿼리를 사용합니다.
  • 데이터베이스에 액세스할 때(Oracle 11g) 데이터베이스 사용자를 사용합니다.APP_ACCESS테이블의 "소유자"와 다른 것(APP_OWNER이것은 데이터베이스 관리자의 어려운 요구 사항입니다.
  • 현재 스키마 이름(APP_OWNER)는 기본 쿼리인 a-la로 하드 코딩됩니다.

"SELECT * FROM " + DatabaseSchemaConstants.SCHEMA_NAME + ".LOCATION"

말할 필요도 없이, "소유자" 사용자 이름이 변경되면 코드가 변경되므로 이 하드 코딩이 특별히 마음에 들지는 않습니다. 이는 유지보수에 전혀 도움이 되지 않습니다.

그래서 제 질문은 이렇습니다.

순수 JPA에서 네이티브 쿼리에 대한 기본 데이터베이스 스키마를 어떻게 구성할 수 있습니까?

제가 지금까지 알아낸 것은 다음과 같습니다.

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

지속성 단위와 지속성 단위의 조합을 제안하는 이 답변을 구체적으로 지정합니다.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>

하지만 이것은 네이티브 쿼리에는 적용되지 않는다고 생각합니다(현재 테스트 중입니다).여기서 또 다른 문제는orm.xml실제로는 구성을 위한 것이 아닙니다. (그러나 여전히 자바 코드의 하드 코딩보다 낫습니다.)

비슷한 답변을 가진 다른 게시물:

JPA - EclipseLink - 기본 스키마를 변경하는 방법

추가 질문:

세션 팩토리에서 프로그래밍 방식으로 최대 절전 모드 기본 스키마 이름을 가져오시겠습니까?

다음을 사용할 것을 제안하는 이 대답을 참조하십시오.{h-schema}적합해 보이지만 최대 절전 모드에만 해당됩니다.우리는 "순수한 JPA"로 남고 싶습니다.또 다른 문제는 최대 절전 모드 설명서에서 {h-schema}에 대한 언급을 찾을 수 없어서 이 기능에 의존하는 것이 안전하지 않다는 것입니다.

기본 쿼리뿐만 아니라 JPA 엔터티 및 쿼리와 같은 모든 것에 대한 기본 데이터베이스 스키마를 설정하는 표준 JPA 방법이 있습니까?

또는 기본 쿼리의 구성 어딘가에서 일부 "파라미터" 또는 "설정" 세트를 사용할 수 있다면 이 문제가 해결될 수 있습니다.

이 질문은 오래된 질문일 수도 있지만, 여전히 이 질문에 부딪힐 경우를 대비하여 대답합니다.사용할 수 있습니다.{h-schema}기본 SQL 쿼리의 경우(최대 절전 모드 v4에 대해 확인됨).이는 다음과 같이 정의됩니다.hibernate.default_schema구성 속성.

예:

"SELECT * FROM {h-schema}LOCATION"

참조: https://vladmihalcea.com/how-to-resolve-the-hibernate-global-database-schema-and-catalog-for-native-sql-queries/

마지막으로 몇 번의 내부 논의 끝에 데이터베이스 차원에서 이 문제를 해결하기로 결정했습니다. 적으로사, 용체를 합니다.after logon트리거:

CREATE OR REPLACE TRIGGER db_logon AFTER logon ON DATABASE
WHEN
(
  USER = 'APP_ACCESS'
)
BEGIN
  EXECUTE immediate 'ALTER SESSION SET CURRENT_SCHEMA = APP_OWNER';
END;

언급URL : https://stackoverflow.com/questions/26885040/how-to-configure-default-database-schema-for-native-queries-in-pure-jpa

반응형