2017-12-22 7 views
0

저는 Spring 4.3과 Hibernate 3.6을 사용하고 있습니다. 커스텀 Hibernate dialect resolver를 지정하려고 시도했지만, 사용되지는 않았습니다.Hibernate 3.6 동적 언어 해석기

내 사용자 지정 dialect 해결 프로그램에 로그 문을 넣었지만 결코 인쇄되지 않습니다.

내 구체적인 질문은 다음과 같습니다

  1. 가 어떻게 내 사용자 지정 방언 해결을 데리러 3.6 최대 절전받을 수 있나요?

  2. 특정 hibernate 속성 (hibernate.dialect_resolvers)이 무시되는 이유는 무엇입니까? 그것을 설정하는 올바른 방법은 무엇입니까?

다음은 내가 시도한 것들의 목록이며, 현재 아이디어가 없습니다.

  1. 은 내가 Hibernate3는의 LocalSessionFactoryBean의를 확장하는 사용자 정의 SessionFactory에 콩을 사용하여 시도 세션 공장의 최대 절전 모드 속성

    <property name="hibernateProperties"> 
         <value> 
         hibernate.dialect_resolvers=mypackage.MyDialectResolver 
         ... 
         </value> 
    </property>
  2. 에 dialect_resolvers 속성을 설정하려고하고 Environment.DIALECT_RESOLVERS을 설정하는 postProcessConfiguration 방법을 오버라이드 재산. config.setProperty(Environment.DIALECT_RESOLVER, MyDialectResolver.class.getName());

    세션 팩토리에서 설정 한 다른 속성들도 예상대로 작동하지만 인쇄하려고 할 때 null로 표시됩니다. 예를 들어, 예상대로 작동하는 연결 제공자를 설정 중이지만 Environment.getProperties().getProperty(CONNECTION_PROVIDER)을 통해 액세스하면 null입니다. config.setProperty(Environment.CONNECTION_PROVIDER, CustomConnectionProvider.class.getName());

    그러나 Dialect Resolver 속성을 나중에 (응용 프로그램 코드 내에서) 인쇄하려고하면 설정되지 않은 것처럼 보입니다. log.info("Dialect resolver property: " + Environment.getProperties().getProperty(Environment.DIALECT_RESOLVERS));

    로그 출력 : "Dialect resolver property: null"

  3. 나는 하이버 네이트 소스 코드를 확인하고, 사람들은 Environment initialization 동안 읽을 수 있도록 표시하기 때문에,뿐만 아니라 시스템 (ENV) 속성을 설정했습니다. 그리고 환경 속성은 DialectFactory에서 DIALECT_RESOLVERS 설정을 가져 오는 데 사용됩니다. 하지만 그건 효과가 없었습니다. hibernate.dialect_resolvers=mypackage.MyDialectResolver;

최종 편집 : 은 내가 hibernate.properties를 추가하고, 그 안에 속성을 설정합니다. 그게 효과가 있었어! hibernate.properties 파일은 classpath의 루트에 있어야하며, 어딘가에 깊이 중첩 될 수 없다. 이것은 그 이유 때문입니다. Hibernate Environment loads the file

답변

0

hibernate.properties를 추가하고 속성을 설정했습니다. 그게 효과가 있었어!

hibernate.properties 파일은 클래스 경로의 루트에 있어야하며 깊이 어딘가에 중첩 될 수 없습니다. 이것은 방법 때문입니다 Hibernate Environment loads the file