В моем проекте springBoot
я использую hibernate для получения lock
в своей базе данных Oracle.
В моей транзакции я выполняю следующий код:
Query q = em.createQuery("SELECT m FROM myTablem WHERE foo= :cat");
q.setParameter("cat", myValue);
q.setMaxResults(1);
//use pessimistic lock
//With Oracle, the select is a 'select for update' request
q.setLockMode(LockModeType.PESSIMISTIC_WRITE);
//set hibernate timeout to 0
//With Oracle, the 'select for update' is transformed in 'select for update nowait'
q.setHint("javax.persistence.lock.timeout", 0);
List<Msisdn> msisdns = q.getResultList();
Я хочу выполнить "select for update"
в моей базе данных.
Но с этим кодом hibernate выполняет два запроса:
Hibernate : выберите * из (выберите m ..... из myTablem m кросс-объединение
Hibernate : выберите ce_code_abpq из m, где idpk1 =? и idpk2 =? и idpk3 =? для обновления nowait
В первом запросе hibernate выполняет запрос select
. И во втором запросе hibernates вызывает "select for update"
для выбранного элемента.
Можно ли выполнить "select for update"
только в одном запросе?
С уважением
Седрик