gpt4 book ai didi

java - 强制 hibernate 在读取之前重新加载 hsqldb 文件

转载 作者:行者123 更新时间:2023-12-02 03:41:29 24 4
gpt4 key购买 nike

我有以下情况:

  • 两个应用程序使用相同的 in file hsqldb
  • app1仅写入 db 或从中删除和app2只从中读取
  • app1信号(通过发送事件)app2db已更新,他应该阅读新值
  • app2无法读取新值,他只能看到旧值

我尝试用以下方式编写:

Session session = sessionFactory.getCurrentSession();
try {
session.setFlushMode(FlushMode.AUTO);
session.saveOrUpdate(cluster);
session.flush();
return true;
} catch (Exception e) {
LOG.error("Failed saving cluster {}!", cluster.getName(), e);
return false;
}

阅读:

Session session = sessionFactory.getCurrentSession();
session.setCacheMode(CacheMode.REFRESH);

try {
return (List<Cluster>) session
.createCriteria(Cluster.class)
.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
.list();
} catch (Exception e) {
LOG.error("Error while trying to read the clusters from file!", e);
return new ArrayList<>();
}

但遗憾的是这不起作用。

我也尝试关闭连接然后重新打开,但这也不起作用。

更新[1]:

我刚刚设置:

basicDataSource.setDefaultTransactionIsolation(Isolation.READ_UNCOMMITTED.value())

app2一边,但即便如此,app2无法读取更新。

最佳答案

HSQLDB 文档声明:

Memory tables are the default type when the CREATE TABLE command is used. Their data is held entirely in memory but any change to their structure or contents is written to the .script file. The script file is read the next time the database is opened, and the MEMORY tables are recreated with all their contents.

由于两个应用程序都使用独立内存表,因此如果不重新启动,数据库状态就无法同步。理论上,app2 中的 hsqldb 实例可以通过使用 SHUTDOWN sql command 关闭它来强制重新加载其状态。并在新连接被声明时开始。但这看起来并不是一个好的解决方案。如果两个实例尝试将其状态保存到同一个文件,也可能会发生冲突。

我建议在 Server mode 中使用 hsqldb如果两个应用程序使用一个数据库,则更合适。服务器模式可以在单独的 JVM 实例上启动,也可以作为 app1 的一部分启动。

Server server = new Server();

server.setDatabaseName(0, "test");
server.setDatabasePath(0, "file:test");
server.setLogWriter(new PrintWriter(System.out));
server.setErrWriter(new PrintWriter(System.err));
server.start();

app2 将能够使用

进行连接
DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/test");

关于java - 强制 hibernate 在读取之前重新加载 hsqldb 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36790036/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com