Hibernate 3.6动态方言解析器
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hibernate 3.6动态方言解析器相关的知识,希望对你有一定的参考价值。
我使用的是Spring 4.3和Hibernate 3.6。我尝试指定一个自定义的Hibernate方言解析器,但它没有被使用。
我将日志语句放在我的自定义方言解析器中,但它们从未打印过。
我的具体问题是:
- 如何让Hibernate 3.6拿起我的自定义方言解析器?
- 为什么忽略一个特定的hibernate属性(hibernate.dialect_resolvers)?设置它的正确方法是什么?
这是我尝试过的一系列事情,而且我目前都没有想法。
- 我尝试在会话工厂的hibernate属性上设置dialect_resolvers属性 <property name =“hibernateProperties”> <value> hibernate.dialect_resolvers = mypackage.MyDialectResolver ... </ value> </ property>
- 我尝试使用自定义的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"
- 我检查了Hibernate源代码,并尝试设置系统(env)属性,因为这些属性似乎是在Environment initialization期间读取的。环境属性用于获取DialectFactory中的DIALECT_RESOLVERS设置。但这也不起作用。
hibernate.dialect_resolvers=mypackage.MyDialectResolver;
最终编辑:我添加了一个hibernate.properties,并在其中设置属性。那很有效! hibernate.properties文件必须位于类路径的根目录下,并且不能嵌套在内部深处。这是因为Hibernate Environment loads the file的方式
答案
我添加了一个hibernate.properties,并在其中设置了属性。那很有效!
hibernate.properties文件必须位于类路径的根目录下,并且不能嵌套在内部深处。这是因为Hibernate Environment loads the file的方式
以上是关于Hibernate 3.6动态方言解析器的主要内容,如果未能解决你的问题,请参考以下文章
Microsoft SQL Server 2014 的 Hibernate 方言是啥?
Hibernate SQL方言 (hibernate.dialect) Spring配置文件applicationContext.xml