Voici ma configuration de base de données pour se connecter à db en utilisant Mise en veille prolongée:connexion de base de données avec mise en veille prolongée ne met pas à jour
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;
}
}
et voici comment je me session du HibernateUtil:
Session session = HibernateUtil.getInstance(dbMode).getSession();
Mon application fonctionne correctement la plupart du temps, mais parfois lorsque j'ajoute un objet à la base de données et que j'exécute une requête, le nouvel objet ajouté ne retourne pas. Je suppose que la connexion a été mise en cache retourner les anciens résultats. Est-ce que mes configurations ont un problème?
Certaines API telles que Session.get (Class, int) iront toujours à la base de données (au lieu de récupérer les données mises en cache). Je suggère que vous lisiez un tutoriel Hibernate. –
@dsp_user Je suppose que se rendre à la base de données pour une nouvelle connexion par requête est coûteux en temps de complexité, Comme ma première connexion à DB après le déploiement s'exécute toujours lente. – Narges
Je ne parle pas de créer une nouvelle connexion db pour chaque opération de base de données. Vous devriez, bien sûr, réutiliser votre connexion db. Je dis juste que certaines API Hibernate iront toujours dans la base de données et récupéreront donc les données/mises à jour les plus récentes. –