Все операторы в функции выполняются в одной транзакции, и никакой плагин не может это изменить.
Вы можете использовать процедуры начиная с v11, но вам все равно придется явно управлять транзакциями.
Я подозреваю, что лучше всего было бы запускать ваши функции на клиенте базы данных, где вы выполняете автоматическую фиксацию автоматически, а не как функцию в базе данных.
Ковариантный возврат означает, что при переопределении метода типом возвращаемого значения метода переопределения может быть подтип типа возвращаемого значения замещенного метода.
Чтобы прояснить это на примере, общим случаем является Object.clone ()
- объявлен как возвращающий тип Object
. Вы можете переопределить это в своем собственном классе следующим образом:
public class MyFoo
{
...
// Note covariant return here, method does not just return Object
public MyFoo clone()
{
// Implementation
}
}
Преимущество здесь заключается в том, что любой метод, содержащий явную ссылку на объект MyFoo, сможет вызвать clone ()
и знать (без преобразования), что возвращаемое значение является экземпляром MyFoo
. Без ковариантных типов возврата необходимо было бы объявить переопределенный метод в MyFoo для возврата Object
, и поэтому вызывающий код должен был бы явно понижать результат вызова метода (даже если бы обе стороны «знали», что он может только когда-либо быть экземпляром MyFoo).
Обратите внимание, что в clone ()
нет ничего особенного и что любой переопределенный метод может иметь ковариантный возврат - я использовал его в качестве примера здесь, поскольку это стандартный метод где это часто бывает полезно.
Для добавления к вышеупомянутым ответам переопределение возможно среди ковариантных типов возврата с ограничением, что тип возврата метода переопределения (метод подклассов) должен быть подклассом типа возврата переопределенного метода (метод суперкласса). Это допустимо от Java 5 вперед.