Hibernate HQL 쿼리를 "dry-run"하고 싶습니다. 실제 데이터베이스에 대해 HQL 쿼리를 실제로 실행하지 않고 Hibernate가 주어진 HQL 쿼리로부터 실행할 실제 SQL 쿼리를 알고 싶습니다.Hibernate와 dry-running HQL 쿼리는 정적으로
테이블에 대한 최대 절전 매핑, HQL 쿼리 문자열, 내 데이터베이스에 대한 dialect에 대한 액세스 권한이 있습니다. 데이터베이스가 필요한 경우에도 액세스 할 수 있습니다.
이제 Hibernate가 데이터베이스에 대한 쿼리를 실제로 실행하지 않고 HQL에서 생성 할 수있는 모든 SQL 쿼리를 어떻게 찾을 수 있습니까? 이것을위한 도구가 있습니까?
하나의 HQL 쿼리에서 많은 SQL 쿼리를 생성 할 수 있으며 생성 된 SQL 쿼리 집합은 데이터베이스의 내용에 따라 다를 수 있습니다.
HQL 쿼리가 실행되는 동안 SQL 쿼리를 기록하는 방법을 묻지 않습니다.
편집 : 메타 데이터를 가져 오기 위해 데이터베이스에 연결하는 데 신경 쓰지 않고 쿼리를 실행하고 싶습니다.
편집 : 또한 어떤 제한과 오프셋이 쿼리에 적용되는지 알고 있습니다. 또한 쿼리에 바인딩 할 실제 매개 변수가 있습니다.
이 모든 리플렉션을 망쳐 놓은 것은 완전히 필요하지 않습니다. 'HQLQueryPlan'은 public 생성자를 가지고 있습니다; 세션 팩토리를'SessionFactoryImplementor'로 캐스트하면됩니다. – ChssPly76
사실, 그의 질문을 다시 읽은 후, 아마도 그가 필요한 모든 것입니다. 저는 쿼리를 실행하는 앱의 모든 클래스를 변경하지 않고도 애플리케이션에서 실시간으로 실행되는 모든 쿼리에 대해 HQL/SQL을 캡처하고자하는 상황을 해결했습니다. 삭제 권한이 없으므로 명확히 할 라인을 추가했습니다. –
충분히 공정하게; 단지 당신이하고 싶은 것이 SQL을 포획하는 것이라면 간단한 appender를 작성하고 그것을 org.hibernate.SQL'에 첨부하는 것이 더 쉽습니다 (그리고 Hibernate 업데이트를 견디는 것이 훨씬 더 쉽습니다) :-) – ChssPly76