Size: a a a

2019 December 24

o

olzhas in Astana JKUG
У тебя операции происходят в разных транзакциях.
источник

o

olzhas in Astana JKUG
@Transactional(propagation = Propagation.REQUIRES_NEW, isolation = Isolation.READ_UNCOMMITTED)
источник

o

olzhas in Astana JKUG
поэтому удаление не видит вставку.
источник

ТС

Таир Сабыргалиев in Astana JKUG
olzhas
@Transactional(propagation = Propagation.REQUIRES_NEW, isolation = Isolation.READ_UNCOMMITTED)
блин, наконец-то кто-то написал очевидную вещь ))
источник

AK

Abzal Kalimbetov in Astana JKUG
Таир Сабыргалиев
блин, наконец-то кто-то написал очевидную вещь ))
Нет, не очевидно. Разве requires new  новую транзакцию не создает?
источник

ОА

Олжас Ахмат in Astana JKUG
Abzal Kalimbetov
Нет, не очевидно. Разве requires new  новую транзакцию не создает?
Создаёт
источник

ОА

Олжас Ахмат in Astana JKUG
Если делать в одной транзакции, то на момент удаления тоже ещё не будет записи в бд
источник

ТС

Таир Сабыргалиев in Astana JKUG
Олжас Ахмат
Если делать в одной транзакции, то на момент удаления тоже ещё не будет записи в бд
будет
источник

ТС

Таир Сабыргалиев in Astana JKUG
хотя “будет” в данном случае понятие относительное
источник

o

olzhas in Astana JKUG
Олжас Ахмат
Если делать в одной транзакции, то на момент удаления тоже ещё не будет записи в бд
Теоретически должен видеть. Если у вас нет там ошибки.
проверте порядок вызова, соединение с тожей же БД, схема таже? может таблицы похожи по названию?
источник

ТС

Таир Сабыргалиев in Astana JKUG
тем более READ_UNCOMMITTED вообще может сделать эту запись видной даже из соседних транзакций
источник

ES

Eugene Svalukhin in Astana JKUG
ну по идее там стоит READ_UNCOMMITTED, а не MODIFY_UNCOMMITED, вот если бы select прогонялся, то скорее всего в таком режиме бы данные были видны, а тут делается delete
источник

ТС

Таир Сабыргалиев in Astana JKUG
Олжас Ахмат
Всем привет!
Вопрос :

Мне в одном методе надо инсертнуть данные в бд, потом возвращается id вновь созданной записи и по этой ид удаляю эту же запись. Т.е. записываю строку в бд и тут же её удаляю.

Использую java, spring, postgres и делаю это так :

@Transactional
public class A {
long id = b.insertData(data);
jdbcTemplate.update("delete from table where id = " + id);
}

@Transactional(propagation = Propagation.REQUIRES_NEW, isolation = Isolation.READ_UNCOMMITTED)
public class B {
public long insertData(data) {
jdbcTemplate.update("insert into.....");
//возвращаю id
}


При удалении, ид вновь созданной строки известен, но в момент удаления этой строки ещё нет в бд. Соответственно падает ошибка.

Пробовал использовать в классе B PlatformTransactionManager. Не помогло или неправильно использовал.

Подскажите плз знающие люди.
какая ошибка падает? delete не должна выдавать ошибку, если она не нашла строку для удаления
источник

o

olzhas in Astana JKUG
READ_UNCOMMITTED и другие флаги влияют когда разные транцакции, в одной транзакции данные всегда видны.
источник

ОА

Олжас Ахмат in Astana JKUG
Таир Сабыргалиев
какая ошибка падает? delete не должна выдавать ошибку, если она не нашла строку для удаления
...PostgresException relation table does not exist
источник

ОА

Олжас Ахмат in Astana JKUG
причем на момент удаления ид уже известна
источник

ТС

Таир Сабыргалиев in Astana JKUG
Олжас Ахмат
...PostgresException relation table does not exist
ну так ошибка то о другом
источник

o

olzhas in Astana JKUG
Он говорит что у тебя таблицы нет.
источник

o

olzhas in Astana JKUG
:)
источник

ОА

Олжас Ахмат in Astana JKUG
🤔
источник