Hibernate-Session-Factory
In unserer web-Anwendung haben wir ein HibernateSessionFactory
Klasse, dass ist das öffnen und schließen von verbindungen. Alles ist okay, aber wenn wir die Aktualisierung der Daten in der Datenbank, ändert es nichts an unserer Anwendung. Leider sehen wir die alten Daten aus der Datenbank. Wie kann ich es beheben?
public class HibernateSessionFactory {
private static final ThreadLocal threadLocal = new ThreadLocal();
private static org.hibernate.SessionFactory sessionFactory;
private static Configuration configuration = new Configuration();
private static ServiceRegistry serviceRegistry;
private static final Logger log = Logger.getLogger(HibernateSessionFactory.class);
static {
try {
configuration.configure();
serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties())
. buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
} catch (Exception e) {
log.error("Error Creating SessionFactory",e);
}
}
private HibernateSessionFactory() {
}
public static Session getSession() throws HibernateException {
Session session = (Session) threadLocal.get();
if (session == null || !session.isOpen()) {
if (sessionFactory == null) {
rebuildSessionFactory();
}
session = (sessionFactory != null) ? sessionFactory.openSession()
: null;
threadLocal.set(session);
}
return session;
}
public static void rebuildSessionFactory() {
try {
configuration.configure();
serviceRegistry = new ServiceRegistryBuilder(). applySettings(configuration.getProperties())
.buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
} catch (Exception e) {
log.error("Error Creating SessionFactory",e);
}
}
public static void closeSession() throws HibernateException {
Session session = (Session) threadLocal.get();
threadLocal.set(null);
if (session != null) {
session.flush();
session.close();
}
}
public static org.hibernate.SessionFactory getSessionFactory() {
return sessionFactory;
}
public static Configuration getConfiguration() {
return configuration;
}
}
posten Sie Ihre hibernate-config-Datei
InformationsquelleAutor Lilit Mkrtchyan | 2013-10-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hibernate ist einer hochentwickelten und komplexen Rahmenbedingungen für den Aufbau einer Schicht zwischen Ihrem Programm und der Datenbank, Bereitstellung eines Objekt-orientierten Modells zu helfen, objektorientierte Programme in Ihren job.
Um dies zu tun, und mehr performat natürlich, es erstellt einen cache, der speichert irgendwie einige Daten aus der Datenbank kommen, oder auf die Datenbank.
Ich denke, dass dieses problem NICHT bezüglich der Verbindung zur Datenbank, sondern vielmehr, wie Sie speichern und Daten ermittelt werden.
Ich werde versuchen zu erklären, mein selbst besser: beim Abfragen Datenbank zum speichern von Daten führen Sie die folgenden Schritte aus:
zB
Ein häufiger Fehler geschieht, wenn Sie eine Datenbank-Abfrage zum abrufen von Daten ist, lassen Sie den Teil über die Transaktion aus dem "query" - Schritte. Auch für das speichern von Daten, die Sie haben, um
Wenn Sie nicht Folgen Sie diesen Schritten ist möglich, dass Sie veraltete Daten in der Anwendung, aber nicht in der Datenbank. Eine Prüfung ist zum ausführen von update/speichern-Abfrage und prüfen Sie manuell in die Datenbank, wenn die Daten geändert/erstellt. Wenn Ihre Anwendung lädt dann veraltete Daten, die Sie wissen, Sie tun der fetch-query in die falsche Richtung(ohne Transaktion).
Hier ein snipped von Beispiel
Wenn Sie wollen darüber hinaus untersuchen Sie unterbrechen die Verwendung des cache von hibernate, können Sie es in der folgenden Art und Weise, aber denken Sie daran, dass, wenn die Daten zwischengespeichert werden, es gibt einen Grund 😉
Dies kann nützlich sein, als ein schneller test, um fortzufahren in der Entdeckung, wenn der Fehler aufgrund einer falschen Abfrage-Nutzung.
Sollten Sie fügen Sie diese an Ihre hibernate-config-xml -
Netter Punkt, ich Frage mich, warum ich den Teil übersprungen. Um die Antwort auf Ihre Zweifel, ich werde sagen, JA, durch die Verwendung von Transaktions-idiom. Offensichtlich könnte dies davon abhängen, welche Art von Sachen, die Sie machen werden.. zum Beispiel, wenn Sie haben, in der gleichen Transaktions-Sitzung eine schreib-operation wird dieser Speicherung der Daten auf der DB..
InformationsquelleAutor LMG