Otwieramy transakcje w trybie tylko do odczytu, a następnie konwertujemy je do trybu zapisu, ponieważ połączenia tylko do odczytu nie będą stanowić problemu, jak to ma miejsce w przypadku salve DB.
Zastępujemy HibernateTemplate klasę i tworzenie metod, aby nawiązać sesję w trybie zapisu
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);
}
};
W logice aplikacji przed zapisem sprawdzamy,
Połączenie jest w trybie zapisu, a następnie po prostu pisz.
W przeciwnym razie jeśli połączenie jest tylko do odczytu, najpierw przeprowadź go w trybie zapisu, wykonaj operację zapisu i ponownie wróć do trybu tylko do odczytu