【发布时间】:2015-01-31 16:31:40
【问题描述】:
我是休眠新手,遇到一个问题真的很困扰我。
我有一个名为codes的mysql表
+------+--------+------+
|id | status | code |
+------+--------+------+
| 1 | 2 | 45234|
+------+--------+------+
| 2 | 1 | 54345|
+------+--------+------+
我从这个单身人士那里得到了一个休眠会话:
public class HBSession {
private static final SessionFactory ourSessionFactory;
private static final ServiceRegistry serviceRegistry;
static {
try {
Configuration configuration = new Configuration();
configuration.configure();
serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
ourSessionFactory = configuration.buildSessionFactory(serviceRegistry);
} catch (Throwable ex) {
throw new ExceptionInInitializerError(ex);
}
}
public static Session getSession() throws HibernateException {
Session session = ourSessionFactory.openSession();
/** Here I have already tried
* session.flush();
* or
// session.clear();
**/
return session;
}
}
我用它来获取结果:
Session = HBSession.getSession();
String HQL = "From CodesEntity C WHERE C.status = 1";
Query query = session.createQuery(HQL);
List<CodesEntity> l = query.list();
session.close();
一切正常,如果我使用相同的应用程序来操作 mysql 数据库。 但是当其他应用程序(如 mysql-cli-client)更新数据库记录时,我无法获得正确的结果。只获取旧数据。
我认为这可能与 hibernate 的缓存机制有关。但我找不到 让事情顺利进行的正确方法:-(
【问题讨论】:
-
其他应用程序意味着他们有自己的会话工厂..??
-
可能数据尚未提交到数据库。
-
是的,我想是的。其实我只是使用mysql-client 比如
update codes set status = 2 where id = 2 -
@DarshanLila 我确定数据已经提交,因为我可以看到使用 mysql-client 更改的记录。
-
根据可用信息,我建议您调试代码并尝试各种检查。看看你是否能找到可能导致问题的原因。
标签: java mysql hibernate caching