Hibernate 3.6动态方言解析器

时间:2017-12-22 07:50:16

标签: spring hibernate configuration

我正在使用Spring 4.3和Hibernate 3.6。我尝试指定一个自定义的Hibernate方言解析器,但它没有被使用。

我将日志语句放在我的自定义方言解析器中,但它们从未打印过。

我的具体问题是:

  1. 如何让Hibernate 3.6拿起我的自定义方言解析器?

  2. 为什么忽略一个特定的hibernate属性(hibernate.dialect_resolvers)?设置它的正确方法是什么?

  3. 以下是我尝试过的一系列事项,而且我目前缺乏想法。

    1. 我尝试在会话工厂的hibernate属性上设置dialect_resolvers属性

      <property name="hibernateProperties">
            <value>
              hibernate.dialect_resolvers=mypackage.MyDialectResolver
              ...
            </value>
      </property>
    2. 我尝试使用自定义SessionFactory bean扩展hibernate3的LocalSessionFactoryBean,并覆盖postProcessConfiguration方法以设置Environment.DIALECT_RESOLVERS属性。 config.setProperty(Environment.DIALECT_RESOLVER, MyDialectResolver.class.getName());

      我在会话工厂中设置的其他属性按预期工作,但在我尝试打印时也显示为空值。例如,我正在设置一个按预期工作的连接提供程序,但在通过Environment.getProperties().getProperty(CONNECTION_PROVIDER)访问时为null。 config.setProperty(Environment.CONNECTION_PROVIDER, CustomConnectionProvider.class.getName());

      但是,当我尝试稍后打印方言解析器属性(在应用程序代码内)时,似乎没有设置它。 log.info("Dialect resolver property: " + Environment.getProperties().getProperty(Environment.DIALECT_RESOLVERS));

      日志输出: "Dialect resolver property: null"

    3. 我检查了Hibernate源代码,并尝试设置系统(env)属性,因为这些属性似乎是在Environment initialization期间读取的。环境属性用于获取DialectFactory中的DIALECT_RESOLVERS设置。但这也不起作用。 hibernate.dialect_resolvers=mypackage.MyDialectResolver;

    4. 最终编辑: 我添加了一个hibernate.properties,并在其中设置了属性。那很有效! hibernate.properties文件必须位于类路径的根目录下,并且不能嵌套在内部深处。这是因为Hibernate Environment loads the file

      的方式

1 个答案:

答案 0 :(得分:0)

我添加了一个hibernate.properties,并在其中设置了属性。那很有效!

hibernate.properties文件必须位于类路径的根目录中,并且不能嵌套在内部深处。这是因为Hibernate Environment loads the file

的方式