powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring Boot JPA: зачем перед update выполняется select?
7 сообщений из 7, страница 1 из 1
Spring Boot JPA: зачем перед update выполняется select?
    #39672574
fplab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть таблица (PostgreSQL):
Код: sql
1.
2.
3.
4.
5.
6.
7.
CREATE TABLE anytable (
  id BIGINT NOT NULL,
  ...
  timestamp_send TIMESTAMP WITHOUT TIME ZONE,
  delivered BOOLEAN DEFAULT FALSE,
  CONSTRAINT pkey PRIMARY KEY (id)
)



Разумеется, таблица описана:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
@Entity
public class Anytable implements Serializable {
   @Id
   @GeneratedValue
   private Long id;
   ...
   private Timestamp timestamp_send;
   private Boolean delivered;

   // Setters && getters
   ...
}



В таблице есть данные. Периодически, по определенному критерию, необходимо обновлять поля timestamp_send и delivered некоторых (не всех) записей таблицы. Список записей для обновления есть. Использую spring-boot-starter-data-jpa. Вот код, обновляющий записи:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
    public void updateAnytable(List<Anytable> list) {
        for(int i = 0; i < list.size(); i++) {
            Anytable table = new Anytable();
            table.setId(list.get(i).getId());
            ...
            table.setTimestamp_send(new Timestamp(new Date().getTime()));
            table.setDelivered(list.get(i).getDelivered());

            repository.getRepository(Anytable.class).save(table);



Реализация стандартная (через public interface AnytableCRUD extends CrudRepository<Anytable, Long> {...}).

Все работает, но есть нюанс. Перед обновлением почему-то происходит выборка из таблицы AnyTable, а уже потом - обновление. Ниже приведен фрагмент лога при обновлении записи:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
-- ЗАЧЕМ ЭТО ДЕЛАЕТСЯ???
select
   anytable.id as id1,
   ...
   anytable.timestamp_send as timestamp_send1
   anytable.delivered as delivered1
from
   anytable
where
   anytable.id=?

binding parameter [1] as [BIGINT] - [742]

-- ТУТ ВСЕ ЯСНО :)
update
   anytable
set
   timestamp_send=?
   delivered=?
where id=?

binding parameter [1] as [TIMESTAMP] - [2018-07-11 13:27:30.203]
binding parameter [2] as [BOOLEAN] - [true]
binding parameter [3] as [BIGINT] - [742]


Почему перед update-ом выполняется select? Ведь структура полностью сформирована в коде и ее надо только сохранить. Спасибо!
...
Рейтинг: 0 / 0
Spring Boot JPA: зачем перед update выполняется select?
    #39672577
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Spring Boot JPA: зачем перед update выполняется select?
    #39672618
fplab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,
Спасибо, не знал. Но пока не помогло. Сдается мне, что из-за того, что в update присутствует после с типом Timestamp:
Код: sql
1.
2.
3.
4.
5.
6.
update
   anytable
set
   timestamp_send=?
   delivered=?
where id=?


Типа нереентерабельный тип :)
...
Рейтинг: 0 / 0
Spring Boot JPA: зачем перед update выполняется select?
    #39672624
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fplabПочему перед update-ом выполняется select?привет от прокладки.
Код: sql
1.
[2018-07-11 13:27:30.203]

это формат даты
...
Рейтинг: 0 / 0
Spring Boot JPA: зачем перед update выполняется select?
    #39672628
fplab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,

Это в логе так выводится. А значение формируется как Timestamp:
Код: java
1.
table.setTimestamp_send(new Timestamp(new Date().getTime()));
...
Рейтинг: 0 / 0
Spring Boot JPA: зачем перед update выполняется select?
    #39672647
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fplab,

У сущностей есть состояния detached/attached. Если бы сущность была привязана к сессии, то select бы не потребовался. Но так как это совершенно новый объект, хиберу для чего-то нужна предварительная выборка.
...
Рейтинг: 0 / 0
Spring Boot JPA: зачем перед update выполняется select?
    #39672651
fplab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,
Пожалуй... Спасибо, подумаю
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring Boot JPA: зачем перед update выполняется select?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]