Как выполнить мягкое удаление, используя JPA @Query и @Param Annotations? - PullRequest
0 голосов
/ 22 января 2019

Я пытаюсь обновить существующие строки в таблице базы данных, используя аннотацию JPA @Query.Я хочу выполнить Soft delete, обновив Deleted_Flag до YES с NO.

Вот мой фрагмент кода:

@Modifying
@Query("UPDATE TBL_NAME SET DELETE_FLAG = 'YES' WHERE DELETE_FLAG = 'NO' 
AND FILE_NM = :FILE_NM")
public void softDelete(@Param("FILE_NM") String fileName)
{
}

Я не получаю никакой ошибки, но данные не обновляются вбаза данных.

Фактический результат должен быть таким, как будто все существующие строки должны быть обновлены с DELETE_FLAG до YES.

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Убедитесь, что вы вызываете метод репозитория с активной транзакцией.

На самом деле, в моем последнем проекте я использую следующую идиому для обновления флага:

Объект помечен Hibernetish:

@Entity
@Table(name="myTable")
@Where(clause = "is_deleted = 0")
@Cacheable
public class MyTable {}

Фактическое обновление поставляется с тривиальным методом поиска:

   @Transactional
    public void deleteById(@NonNull final Long themeId) {
        themeRepository.findById(themeId).orElseThrow(() -> new EntityNotFoundException(THEME_NOT_FOUND + themeId))
                .setDeleted(true);
    }
0 голосов
/ 22 января 2019

Может быть, использование столбца первичного ключа поможет вместе с другими требованиями 'where' при использовании запроса 'update'

...