2014-09-08 3 views
1

나는 Hibernate에 초보자이며, 뭔가 빠뜨릴 수도있다.왜 Hibernate는 지정된 DB 드라이버에서 'Dialect'를 찾아 낼 수 없습니까?

최대 절전 모드는 데이터베이스와 무관합니다. 따라서 우리가 응용 프로그램에서 사용할 데이터베이스가 무엇이든 관계없이 해당 데이터베이스와 관련된 방언을 설정해야합니다.

하지만 왜 그렇게해야합니까? 우리가 이미 지정한 DB 드라이버의 유형에 의해 그것을 최대 절전 모드로 만들 수 없습니까?

+0

종종 드라이버와 연결 문자열이 실제 드라이버에 대한 프록시를 사용하고 있습니다. –

답변

1

Hibernate 구성 파일에서 dialect 속성을 먼저 확인합니다. 속성이 없으면 DB 연결 정보를 사용하고 데이터베이스에 적합한 기본 dialect를로드하려고 시도합니다.

DialectFactory이 링크를 참조하십시오, 그것은 말한다 :

적절한 방언 인스턴스를 구축합니다. Dialect가 명시 적으로 들어오는 속성에 명명 된 이라면 사용되어야합니다. 그렇지 않으면 전달 된 연결을 기반으로 한 방언 해결 프로그램에 의해 결정된 입니다.

dialect가 명시 적으로 설정되어 있지 않고 주어진 연결에서 결정을 내릴 수있는 예외가없는 경우 예외가 발생합니다 ( ).

또한 여기 Optional configuration properties에 대한, 그것은 말한다 : 대부분의 경우

사실에 의해 반환되는 JDBC 메타 데이터를 기반으로 올바른 org.hibernate.dialect.Dialect 구현을 선택할 수 있습니다 최대 절전 모드 JDBC 드라이버

항상 hibernate.dialect 프로퍼티로 설정 :

SQL Dialects이 링크는 방언을 지정하는 경우 다음 주어진 방언에 따라 다른 특성 몇 가지 기본 값을 추가하는 시도를 최대 절전 모드 말한다 올바른 org.hibernate.dialect.Dialect 데이터베이스의 서브 클래스. 만약 이 dialect를 지정하면, Hibernate는 위에 열거 된 다른 프로퍼티들 중 중 일부에 적절한 기본값을 사용할 것이다. 즉, 수동으로 지정하려면 이 필요하지 않습니다.

마지막으로 방언을 지정하는 것이 좋지만 세부 사항을 제공하지 않을 경우에도 최대 절전 모드는 기본 방언을 사용하려고 시도합니다.

1

나는 드라이버와 방언과 다소 혼동스러워합니다. 두 가지 개념이 모두 함께 있습니다.

데이터베이스에 연결하여 쿼리를 실행하고 결과를 얻는 것과 같은 데이터베이스 드라이버가 필요합니다. 하지만 hibernate는 ORM 프레임 워크이기 때문에 여기에 또 다른 레이어가 있는데, hibernate는 먼저 save (Object)와 같은 작업을 드라이버가 이해하고 실행할 수있는 쿼리로 변환해야합니다. 따라서 방언은 기본적으로 동면 전환이 사용하는 문법입니다.

또한, 더 잘 분리 된 상태로 유지하는 것이 좋습니다. 왜 당신은 드라이버 클래스 (드라이버 제공자에 대한 간접적 인)에 종속되기를 원할 것이고, 프레임 워크의 사용자는 사용 가능한 방언 사이에서 선택하도록 할 것입니다. 말이 돼?

관련 문제