Мне нужно перенести старую библиотеку, созданную кем-то, кого больше нет в офисе, в hibernate 5. Я вижу, что этот код содержит этот класс:
public class CustomTransaction extends JdbcTransaction {
private Stack<Savepoint> savepoints = new Stack<>();
protected CustomTransaction(TransactionCoordinator transactionCoordinator) {
super(transactionCoordinator);
}
public void pushSavepoint() throws SQLException {
Connection connection = transactionCoordinator().getJdbcCoordinator().getLogicalConnection().getConnection();
Savepoint savepoint = connection.setSavepoint();
savepoints.push(savepoint);
}
public Savepoint peekSavepoint() {
return savepoints.isEmpty() ? null : savepoints.peek();
}
}
создается из:
public final class CustomTransactionFactory implements TransactionFactory<JdbcTransaction> {
@Override
public JdbcTransaction createTransaction(TransactionCoordinator transactionCoordinator) {
return new CustomTransaction(transactionCoordinator);
}
@Override
public boolean canBeDriver() {
return true;
}
@Override
public ConnectionReleaseMode getDefaultReleaseMode() {
return ConnectionReleaseMode.ON_CLOSE;
}
@Override
public boolean compatibleWithJtaSynchronization() {
return false;
}
@Override
public boolean isJoinableJtaTransaction(TransactionCoordinator transactionCoordinator, JdbcTransaction transaction) {
return false;
}
}
Читая руководство по переходу с hibernate 4 на 5, я прочитал, что мне нужно изменить:
hibernate.transaction.factory_class=org.hibernate.transaction.JDBCTransactionFactory
на hibernate.transaction.coordinator_class = org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl
1013 * В моем случае начальный класс не был JDBCTransactionFactory но класс расширения, и если я пытаюсь расширение JdbcResourceLocalTransactionCoordinatorImpl, как можно было бы думать, как первые попробовать, вамобнаружите, что эти классы не имеют ничего общего друг с другом.
Что я должен использовать в качестве замены для JDBCTransactionFactory в этом случае?До этого ядро создавало пользовательские транзакции и сохраняло в нем точку сохранения.Теперь я вижу, что невозможно создать собственную транзакцию.