Hibernate 3.6动态方言解析器

问题描述 投票:1回答:1

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

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

我的具体问题是:

  1. 如何让Hibernate 3.6拿起我的自定义方言解析器?
  2. 为什么忽略一个特定的hibernate属性(hibernate.dialect_resolvers)?设置它的正确方法是什么?

这是我尝试过的一系列事情,而且我目前都没有想法。

  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;

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

spring hibernate configuration
1个回答
0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.