Hibernate가 생성된 쿼리에서 사용하는 SQL 테이블 별칭을 제어하려면 어떻게 해야 합니까?
tl;dr: 최대 절전 모드는 다음과 같은 쿼리에서 SQL 테이블 별칭을 자동으로 생성합니다.jurisdicti4_
또는this_
다음은 쿼리 예제입니다.
SELECT
this_.id AS id2_6_3_,
this_.a_table_column AS a_table_column3_6_3_,
jurisdicti4_.b_table_column AS b_table_column4_6_3_,
FROM
app_table_a this_
LEFT OUTER JOIN jurisdiction jurisdicti4_ ON this_.jurisdiction = jurisdicti4_.name
WHERE
this_.a_table_column = ?
최대 절전 모드 기준 API를 사용하여 쿼리에서 SQL 별칭을 참조해야 하는 힌트를 추가하고 있으므로 다음 중 하나를 수행하는 방법을 알아야 합니다.
- Hibernate가 쿼리에 사용할 SQL 테이블 별칭을 지정합니다(예: 사용하도록 지시).
juris
대신에jurisdicti4_
위해서jurisdiction
또는 - 특정 테이블 또는 엔티티에 대해 사용할 정확한 SQL 테이블 별칭을 알려주기 위해 최대 절전 모드로 전환합니다(예: 쿼리에서 별칭을 알려주기).
jurisdiction
될 것이다jurisdicti4_
.
전체 이야기:
저는 일부 복잡한 검색 쿼리를 생성하기 위해 Hibernate 4.3.8 및 Hibernate Criteria API를 사용하는 Oracle DB가 있는 Java 앱을 상속했습니다.최근에 심각한 SQL 성능 문제가 발생하여 이러한 쿼리에 힌트를 포함해야 합니다.그러나 Oracle을 사용하며 인덱스 힌트는 다음과 같습니다.
/*+ index (TABLE_ALIAS INDEX_NAME) */
다음을 사용하여 필요한 힌트를 추가했습니다.Criteria.addHint(...)
하지만 저는 Hibernate에서 생성된 하드 코딩을 해야 했습니다.TABLE_ALIAS
힌트 문자열로시간이 지남에 따라 별칭이 변경될 수 있으므로 별칭이 생성되는 방식을 제어하거나 SQL 힌트를 추가할 때 사용할 값을 검색할 수 있어야 합니다.
편집: 이 웹 사이트는 최대 절전 모드 SQL 별칭 생성 프로세스를 설명합니다. https://prismoskills.appspot.com/lessons/Hibernate/Chapter_23_-_Hibernate_alias_names.jsp
조인을 프로그래밍 방식으로 설정하면 SQL 별칭을 부분적으로 제어할 수 있습니다.criteria.createAlias(associationPath, alias)
.그alias
전달한 값은 테이블에 대한 SQL 별칭의 첫 번째 부분으로 사용되는 것 같습니다.하지만 Hibernate는 생성된 테이블 ID 정수를 추가하기 때문에 다음과 같은 것을 얻을 수 있습니다.myalias4_
생성된 SQL에서.또한, 이것은 오직 내가 기준에 내 자신을 설정한 조인에서만 작동하는 것처럼 보입니다.최대 절전 모드는 종종 매핑을 기반으로 자체적으로 추가되는데, 이와 같은 수준의 부분 제어를 어떻게 할 수 있는지 모르겠습니다.
언급URL : https://stackoverflow.com/questions/63366435/how-can-i-control-the-sql-table-aliases-that-hibernate-uses-in-its-generated-que
'programing' 카테고리의 다른 글
쿼리 중 MySQL 서버에 대한 연결 끊김 (0) | 2023.07.26 |
---|---|
파이썬 및 MySQL (0) | 2023.07.26 |
노드의 child_process를 약속하는 방법.exec 및 child_process.Bluebird에서 execFile 기능을 사용하시겠습니까? (0) | 2023.07.26 |
오류: '노드'에서 'appendChild'를 실행하지 못했습니다. 매개 변수 1이 '노드' 유형이 아닙니다. (0) | 2023.07.26 |
예외 없이 트랜잭션 롤백을 수행하시겠습니까? (0) | 2023.07.26 |