Всегда принудительно обновлять сущность

Проблема, которую я обнаружил, заключается в том, что поведение JPA заключается в том, что всегда необходимо внести изменения в объект, чтобы вызвать PreUpdate с помощью save(). Мне нужен способ найти объект в базе данных и, скажем, обновить дату с помощью PreUpdate.

Мой код выглядит следующим образом:

@NoArgsConstructor
@AllArgsConstructor
@Data
@DynamicUpdate
@Entity
@Table(name = "Table")
public class TableEntity {
    @Id
    @GeneratedValue(generator = "UUID")
    @GenericGenerator(
            name = "UUID",
            strategy = "uuid2"
    )
    @Column(name = "Id", nullable = false)
    private String id;
    
    @Column(name = "Something")
    private String something;

    @Column(name = "Fecha")
    private LocalDateTime fecha;

    @PreUpdate
    private void update() {
        setFecha(LocalDateTime.now());
    }
}

Репозиторий — это пустой репозиторий без какого-либо специального метода. У меня есть служба, которая автоматически подключает репозиторий. Тогда у меня есть такой метод:

    @Transactional
    public InformationDTO save(String id) {

        TableEntity entity = capRepository.findById(id);

        entity.setSomething("mock");

        repo.save(entity);

        [...]
        return new InformationDTO();
    }

Если я это сделаю, PreUpdate вызовет счастливые дни, но если вместо этого я выполню этот метод,

    @Transactional
    public InformationDTO save(String id) {

        TableEntity entity = capRepository.findById(id);

        repo.save(entity);

        [...]
        return new InformationDTO();
    }

это не вызовет PreUpdate.

Есть ли способ запустить PreUpdate без каких-либо изменений объекта?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете просто вызвать update самостоятельно.

Я пытался сделать PreUpdate на 100% невидимым для разработчика, но, похоже, им нужно будет вызвать update(). Спасибо за вашу помощь :)

David_Garcia 18.06.2024 12:54

Вы можете сделать это при загрузке объекта :)

talex 18.06.2024 14:21

Другие вопросы по теме