我正在使用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
的方式答案 0 :(得分:0)
我添加了一个hibernate.properties,并在其中设置了属性。那很有效!
hibernate.properties文件必须位于类路径的根目录中,并且不能嵌套在内部深处。这是因为Hibernate Environment loads the file
的方式