Пользовательский запрос обновления Spring Data JPA не обновляет объект в базе данныхJAVA

Программисты JAVA общаются здесь
Anonymous
Пользовательский запрос обновления Spring Data JPA не обновляет объект в базе данных

Сообщение Anonymous »

Я столкнулся с проблемой при запросе обновления в репозитории Spring Data JPA. Запрос не обновляет базу данных должным образом. Вот подробности:
Запрос к репозиторию
Запрос в моем репозитории определяется следующим образом:

Код: Выделить всё

@Modifying(clearAutomatically = true)
@Transactional
@Query("UPDATE JobMeta j SET j.document_id = :document_id, j.status = :status WHERE j.id = :id")
int updateDocumentIdAndStatus(@Param("id") Long id, @Param("document_id") String documentId,
@Param("status") String status);
Метод обслуживания
Вот как я использую описанный выше метод репозитория в своем сервисе:

Код: Выделить всё

public void updateJobStatus(final DmsCallbackRequest request) {
final Long jobId = Long.valueOf(request.getJobId());
logger.info("spider : Updating the Job Status after DMS Callback: {} {}", request.getJobId(), request.getZipDocumentId());

final Optional optionalJobMeta = this.jobMetaRepository.findById(jobId);
try {
if (optionalJobMeta.isPresent()) {
logger.info("spider : ZipDocumentId received from request: {} {}", request.getJobId(), request.getZipDocumentId());
int count = this.jobMetaRepository.updateDocumentIdAndStatus(jobId,
request.getZipDocumentId(), States.zip_success.name());
logger.info("spider : JobMeta Rows Updated: {}", count);
} else {
logger.warn("spider : JobMeta not found for JobId: {}", request.getJobId());
throw new JobMetaNotFoundException("JobMeta not found for JobId: " + request.getJobId());
}
} catch (Exception e) {
logger.error("Error updating job status to 'success' for JobMeta Id: {} {}", jobId, e.getMessage());
throw new RuntimeException("Error updating job status to 'success'", e);
}
}

Что я пробовал
Я пробовал два подхода к обновлению document_id:
Непосредственное обновление объекта:

Код: Выделить всё

if (optionalJobMeta.isPresent()) {
logger.info("spider : ZipDocumentId received from request: {} {}", request.getJobId(), request.getZipDocumentId());
JobMeta meta = optionalJobMeta.get();
meta.setDocument_id(request.getZipDocumentId());
meta.setStatus(States.zip_success.name());
jobMetaRepository.save(meta);
logger.info("spider : JobMeta Rows Updated");
}

Использование пользовательского запроса на обновление:

Код: Выделить всё

int count = this.jobMetaRepository.updateDocumentIdAndStatus(jobId,
request.getZipDocumentId(), States.zip_success.name());

Ниже приведен класс JobMeta для справки.

Код: Выделить всё

package com.sh.spider.entity;

import jakarta.persistence.*;
import lombok.*;
import org.springframework.cglib.core.Local;

import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger;

@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Entity
@Table(name = "job_meta")
public class JobMeta implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER)
@JoinColumn(name = "id")
private Set jobDetails = new HashSet();
private int total_links;
private int success_links;
private int failed_links;
private String document_id;
private String user_identifier;
private String status;
private LocalDateTime created_on;
private String zip_url;
private LocalDateTime zip_expired_on;
}

Проблема
В обоих подходах не обновляется document_id в базе данных, хотя он выполняется без выдачи исключений.
Вопрос
Почему пользовательский запрос на обновление не работает должным образом? Есть ли какие-либо дополнительные настройки или настройки, которые мне нужно внести для правильной работы?

Подробнее здесь: https://stackoverflow.com/questions/789 ... n-database

Вернуться в «JAVA»