Здравствуйте! У меня проблема с транзакциями в Java + Spring.В основном проблема заключается в том, что когда я тестировал параллельные сообщения в своем приложении, я вставляю более одной строки (иногда), а иногда получаю эту ошибку:
2019-03-0913: 30: 23.096 ПРЕДУПРЕЖДЕНИЕ 20820 --- [nio-8080-exec-7] ohengine.jdbc.spi.SqlExceptionHelper: Ошибка SQL: 0, SQLState: ноль 2019-03-09 13: 30: 23.096 ПРЕДУПРЕЖДЕНИЕ 20820 ---[nio-8080-exec-9] ohengine.jdbc.spi.SqlExceptionHelper: Ошибка SQL: 0, SQLState: пусто 2019-03-09 13: 30: 23.096 ОШИБКА 20820 --- [nio-8080-exec-7] ohengine.jdbc.spi.SqlExceptionHelper: HikariPool-1 - Соединение недоступно, время запроса истекло после 30004 мс.2019-03-09 13: 30: 23.096 ОШИБКА 20820 --- [nio-8080-exec-9] ohengine.jdbc.spi.SqlExceptionHelper: HikariPool-1 - соединение недоступно, время запроса истекло после 30004 мс.2019-03-09 13: 30: 23.096 ПРЕДУПРЕЖДЕНИЕ 20820 --- [nio-8080-exec-5] ohengine.jdbc.spi.SqlExceptionHelper: Ошибка SQL: 0, SQLState: null ....
Мой метод очень прост:
@Transactional(isolation = Isolation.SERIALIZABLE)
public SeatReservation saveOrException(SeatReservation entity) {
if (!seatReservationDao.existsByUuid(uuid)) {
entity.setUuid(uuid);
return seatReservationDao.save(entity);
}
return null;
}
Я знаю, что есть другие способы сделать это, но я пытаюсь понять, почему, если я использую Isolation.SERIALIZABLE, это не исключает одну транзакцию
Это журнал:
Hibernate: выберите seatreserv0_.id как col_0_0_ из резервации seatreserv0_, где seatreserv0_.uuid =?предел?
Hibernate: выберите seatreserv0_.id как col_0_0_ из резервации seatreserv0_, где seatreserv0_.uuid =?предел?
1018 * Hibernate: выберите seatreserv0_.id в id1_0_0_, seatreserv0_.arrival в arrival2_0_0_, seatreserv0_.departure как departur3_0_0_, seatreserv0_.email как email4_0_0_, seatreserv0_.last_name как last_nam5_0_0_, seatreserv0_.name как name6_0_0_, seatreserv0_.uuid в uuid7_0_0_из резервации seatreserv0_ где seatreserv0_.id =?
1020 * Hibernate: выберите seatreserv0_.id в id1_0_0_, seatreserv0_.arrival в arrival2_0_0_, seatreserv0_.departure как departur3_0_0_, seatreserv0_.email как email4_0_0_, seatreserv0_.last_name как last_nam5_0_0_, seatreserv0_.name как name6_0_0_, seatreserv0_.uuid в uuid7_0_0_из резервации seatreserv0_ где seatreserv0_.id =?
Это исключает все чтения, а затем все сохраняет.Странно
Заранее спасибо!