programing

Hibernate가 생성된 쿼리에서 사용하는 SQL 테이블 별칭을 제어하려면 어떻게 해야 합니까?

instargram 2023. 7. 26. 21:36
반응형

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 별칭을 참조해야 하는 힌트를 추가하고 있으므로 다음 중 하나를 수행하는 방법을 알아야 합니다.

  1. Hibernate가 쿼리에 사용할 SQL 테이블 별칭을 지정합니다(예: 사용하도록 지시).juris대신에jurisdicti4_위해서jurisdiction또는
  2. 특정 테이블 또는 엔티티에 대해 사용할 정확한 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

반응형