순수 JPA에서 네이티브 쿼리에 대한 기본 데이터베이스 스키마를 구성하는 방법은 무엇입니까?
우리의 상황은 다음과 같습니다.
- NAT은 엔터프라이즈 애플리케이션의 지속성을 위해 (순수해야 함) JPA를 사용합니다.
- 성능상의 이유로 인해 여기 저기에서 상당히 복잡한 기본 쿼리를 사용합니다.
- 데이터베이스에 액세스할 때(Oracle 11g) 데이터베이스 사용자를 사용합니다.
APP_ACCESS
테이블의 "소유자"와 다른 것(APP_OWNER
이것은 데이터베이스 관리자의 어려운 요구 사항입니다. - 현재 스키마 이름(
APP_OWNER
)는 기본 쿼리인 a-la로 하드 코딩됩니다.
"SELECT * FROM " + DatabaseSchemaConstants.SCHEMA_NAME + ".LOCATION"
말할 필요도 없이, "소유자" 사용자 이름이 변경되면 코드가 변경되므로 이 하드 코딩이 특별히 마음에 들지는 않습니다. 이는 유지보수에 전혀 도움이 되지 않습니다.
그래서 제 질문은 이렇습니다.
순수 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
실제로는 구성을 위한 것이 아닙니다. (그러나 여전히 자바 코드의 하드 코딩보다 낫습니다.)
비슷한 답변을 가진 다른 게시물:
추가 질문:
다음을 사용할 것을 제안하는 이 대답을 참조하십시오.{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
'itsource' 카테고리의 다른 글
H2 스키마 초기화.SQL 문에 구문 오류가 있습니다. (0) | 2023.07.21 |
---|---|
플라스크-sqlalchemy 또는 sqlalchemy (0) | 2023.07.21 |
Helm을 통해 배포된 Java Spring 부팅 응용 프로그램에서 구성 맵의 속성을 사용하는 방법 (0) | 2023.07.21 |
파이썬의 최대공약수 코드 (0) | 2023.07.21 |
원두형의 원두. 원두형. 원두형. 원두형. 원두형. 원두형.ServerCodecConfigurer'를 찾을 수 없습니다. (0) | 2023.07.21 |