使用 spring+hibernate 进行 MySql 复制,我有一个简单的问题;
打开的事务处于只读模式,即指向从数据库。 如果我想在事务期间保存/更新/删除任何内容,将其转换为写入模式的最佳方法是什么?
我不想打开写入模式事务,因为大多数时候我想读取内容。
我需要覆盖这个东西的复制驱动程序/Hibernate 模板吗?
最佳答案
我们以只读模式打开事务,然后将其转换为写入模式,因为只读连接不会像辅助数据库那样成为问题。
我们重写HibernateTemplate类并创建方法以使 session 处于写入模式
public final void writeEnabled(){
getSession().doWork(jdbcWorkWriteEnabled);
}
public final void writeDisabled(boolean flush){
if(flush)
flush();
getSession().doWork(jdbcWorkWriteDisabled);
}
public static final void writeEnabled(Session session){
session.doWork(jdbcWorkWriteEnabled);
}
public static final void writeDisabled(boolean flush,Session session){
if(flush)
session.flush();
session.doWork(jdbcWorkWriteDisabled);
}
final static Work jdbcWorkWriteEnabled = new Work(){
public void execute(Connection connection) throws SQLException {
connection.setReadOnly(false);
}
};
final static Work jdbcWorkWriteDisabled = new Work(){
public void execute(Connection connection) throws SQLException {
connection.setReadOnly(true);
}
};
在写入之前我们检查应用程序逻辑
连接处于写入模式,然后只需写入即可。
否则,如果连接是只读的,则首先将其设置为写入模式,执行写入操作,然后再次将其恢复为只读
关于java - 如何在事务期间将只读 hibernate session 转换为写入(主/从数据库),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8694254/