سؤال

لقد استخدمت سابقًا hibernate 3.2 وboneCP ولكني قمت للتو بالترقية إلى hibernate 4.3.5 وتجمع اتصال Hikari لتوصيل تطبيق Java الخاص بي بقاعدة بيانات Oracle الخاصة بي.لقد قمت بتعيين v$session.program على اسم البرنامج الذي أريده وأضفته إلى تكوين السبات.

لقد قمت بإنشاء فئة تكوين السبات الخاصة بي والتي تعمل على توسيع نطاق Configuration الطبقة المقدمة من السبات.

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 يقوم ببعض السحر من خلال الانعكاس مع حقل PersistenceContext الخاص بـ SessionImpl (يجب أن تكون هذه هي المشكلة لأنها كانت تعمل قبل الترقية أيضًا).

ثم أتصل

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;

لا أستطيع العثور على البرنامج الذي بدأته للتو.أي أفكار ما أفعله خطأ؟

هل كانت مفيدة؟

المحلول

لقد وجدت الحل.أضفت للتو hibernate.hikari.dataSource.v$session.programو hibernate.hikari.dataSource.v$session.username إلى التكوين الخاص بي وكل شيء سار على ما يرام.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top