0

我以前使用过 hibernate 3.2 和 boneCP,但我刚刚升级到 hibernate 4.3.5 和 Hikari 连接池来将我的 java 应用程序连接到我的 oracle 数据库。我将 v$session.program 设置为我想要的程序名称并将其添加到休眠配置中。

我创建了自己的 hibernate 配置类,它扩展了Configurationhibernate 提供的类。

public class MyConfiguration extends Configuration {
    private static final long serialVersionUID = 1L;

    public MyConfiguration() { }

    public MyConfiguration(SettingsFactory settingsFactory) {
        super(settingsFactory);
    }

    @Override
    public SessionFactory buildSessionFactory() throws HibernateException {
        ServiceRegistry registry = new StandardServiceRegistryBuilder()
        .applySettings(getProperties()).build();
        return new MySessionFactory(super.buildSessionFactory(registry));
    }
}

MySessionFactory是 SessionFactory 的自定义包装器,它通过 SessionImpl 的 persistenceContext 字段的反射来做一些魔术(这应该是问题,因为它在升级之前也可以工作)。

然后我打电话

Document configDocument = loadHibernateConfigruationDocument();
MyConfiguration conf = new MyConfiguration();
conf.configure(configDocument);
conf.buildSessionFactory();

但是,如果我去数据库(在应用程序运行时)并查询

SELECT MACHINE, PROGRAM, USERNAME, count(*) as COUNT FROM v$session GROUP BY MACHINE, PROGRAM, USERNAME;

我找不到我刚启动的程序。任何想法我做错了什么?

4

1 回答 1

0

我找到了解决方案。我刚刚添加hibernate.hikari.dataSource.v$session.programhibernate.hikari.dataSource.v$session.username我的配置中,一切正常。

于 2014-06-05T13:54:51.713 回答