Hibernate 4.3.5 ignoriert die Konfigurationseigenschaft v$session.program
-
26-12-2019 - |
Frage
Ich habe zuvor Hibernate 3.2 und BoneCP verwendet, habe aber gerade ein Upgrade auf Hibernate 4.3.5 und den Hikari-Verbindungspool durchgeführt, um meine Java-Anwendung mit meiner Oracle-Datenbank zu verbinden.Ich setze v$session.program auf den gewünschten Programmnamen und füge ihn der Ruhezustandskonfiguration hinzu.
Ich habe meine eigene Hibernate-Konfigurationsklasse erstellt, die das erweitert Configuration
Von Hibernate bereitgestellte Klasse.
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));
}
}
Der MySessionFactory
ist ein benutzerdefinierter Wrapper für die SessionFactory, der durch Reflektion mit dem Feld persistenceContext des SessionImpl etwas Wunderbares bewirkt (das sollte jedoch das Problem sein, da es auch vor dem Upgrade funktionierte).
Dann rufe ich an
Document configDocument = loadHibernateConfigruationDocument();
MyConfiguration conf = new MyConfiguration();
conf.configure(configDocument);
conf.buildSessionFactory();
Wenn ich jedoch zur Datenbank gehe (während die Anwendung ausgeführt wird) und eine Abfrage durchführe
SELECT MACHINE, PROGRAM, USERNAME, count(*) as COUNT FROM v$session GROUP BY MACHINE, PROGRAM, USERNAME;
Ich kann das Programm, das ich gerade gestartet habe, nicht finden.Irgendwelche Ideen, was ich falsch mache?
Lösung
Ich habe die Lösung gefunden.Ich habe gerade hinzugefügt hibernate.hikari.dataSource.v$session.program
Und hibernate.hikari.dataSource.v$session.username
zu meiner Konfiguration und alles hat gut funktioniert.