【发布时间】:2017-12-22 07:50:16
【问题描述】:
我正在使用 Spring 4.3 和 Hibernate 3.6。我尝试指定一个自定义的 Hibernate 方言解析器,但它没有被使用。
我将日志语句放入我的自定义方言解析器中,但它们从未打印出来。
我的具体问题是:
如何让 Hibernate 3.6 使用我的自定义方言解析器?
为什么会忽略一个特定的休眠属性 (hibernate.dialect_resolvers)?正确的设置方法是什么?
这是我尝试过的事情的列表,但我目前没有想法。
-
我尝试在会话工厂的休眠属性上设置 dialect_resolvers 属性
hibernate.dialect_resolvers=mypackage.MyDialectResolver ... 值> -
我尝试使用扩展 hibernate3 的 LocalSessionFactoryBean 的自定义 SessionFactory bean,并覆盖 postProcessConfiguration 方法来设置 Environment.DIALECT_RESOLVERS 属性。
config.setProperty(Environment.DIALECT_RESOLVER, MyDialectResolver.class.getName());我在会话工厂中设置的其他属性按预期工作,但在我尝试打印它们时也显示为空值。例如,我正在设置一个按预期工作的连接提供程序,但在通过
Environment.getProperties().getProperty(CONNECTION_PROVIDER)访问时为空。config.setProperty(Environment.CONNECTION_PROVIDER, CustomConnectionProvider.class.getName());但是,当我稍后尝试打印方言解析器属性时(在应用程序代码中),它似乎没有设置。
log.info("Dialect resolver property: " + Environment.getProperties().getProperty(Environment.DIALECT_RESOLVERS));日志输出:
"Dialect resolver property: null" 我检查了 Hibernate 源代码,并尝试设置系统 (env) 属性,因为它们似乎在 Environment initialization 期间被读取。环境属性用于获取DialectFactory 中的 DIALECT_RESOLVERS 设置。但这也不起作用。
hibernate.dialect_resolvers=mypackage.MyDialectResolver;
最终编辑: 我添加了一个 hibernate.properties,并在其中设置了属性。那行得通! hibernate.properties 文件必须位于类路径的根目录,并且不能嵌套在某个深处。这是因为Hibernate Environment loads the file
【问题讨论】:
标签: spring hibernate configuration