Hier meine Datenbank-Konfiguration ist Hibernate zu verbinden db mit:Datenbankverbindung mit Hibernate nicht aktualisiert
public class HibernateUtil {
public static HibernateUtil mInstance = null;
public static HibernateUtil getInstance(DBMode dbMode) {
if (mInstance == null) {
mInstance = new HibernateUtil(dbMode);
}
return mInstance;
}
private SessionFactory sessionFactory;
private HibernateUtil(DBMode dbMode) {
buildSessionFactoryTest();
}
private void buildSessionFactoryTest() {
Configuration configuration = new Configuration()
.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLDialect")
.setProperty("hibernate.connection.driver_class", "com.mysql.jdbc.Driver")
.setProperty("hibernate.connection.url",
"jdbc:mysql://ip:port/DB?createDatabaseIfNotExist=true&autoReconnect=true&useUnicode=true&connectionCollation=utf8_general_ci&characterSetResults=utf8&characterEncoding=utf-8")
.setProperty("hibernate.connection.username", "root")
.setProperty("hibernate.connection.password", "password")
.setProperty("hibernate.hbm2ddl.auto", "update").setProperty("c3p0.max_size", "20")
.setProperty("c3p0.timeout", "1800").setProperty("3p0.min_size", "5")
.setProperty("hibernate.c3p0.max_statements", "0")
.setProperty("connection.provider_class", "org.hibernate.connection.C3P0ConnectionProvider")
.configure();
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties())
.buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
}
public Session getSession() {
Session session;
try {
session = sessionFactory.getCurrentSession();
} catch (HibernateException e) {
session = sessionFactory.openSession();
}
if (session == null || sessionFactory.isClosed() || !session.isConnected() || !session.isOpen()) {
sessionFactory.close();
buildSessionFactoryTest();
session = sessionFactory.openSession();
}
return session;
}
}
und hier ist, wie ich Sitzung von HibernateUtil erhalten:
Session session = HibernateUtil.getInstance(dbMode).getSession();
Meine App funktioniert meistens korrekt, aber manchmal, wenn ich ein Objekt zur Datenbank hinzufüge und eine Abfrage ausführe, kommt das neue hinzugefügte Objekt nicht zurück. Ich denke, die Verbindung wurde zwischengespeichert, um alte Ergebnisse zurückzugeben. Haben meine Konfigurationen Probleme?
Einige APIs wie Session.get (Class, int) gehen immer zur Datenbank (anstatt zwischengespeicherte Daten zu holen). Ich schlage vor, dass Sie ein Hibernate-Tutorial lesen. –
@dsp_user Ich denke, die Datenbank für neue Verbindung pro Anfrage ist teuer in der Zeit Komplexität, Wie meine erste Verbindung zu db nach der Bereitstellung läuft immer langsam. – Narges
Ich spreche nicht über das Erstellen einer neuen Datenbankverbindung für jede Datenbankoperation. Sie sollten natürlich Ihre db-Verbindung wiederverwenden. Ich sage nur, dass einige Hibernate-APIs immer die Datenbank aufrufen und somit die neuesten Daten/Updates abrufen. –