Запрос к репозиторию
Запрос в моем репозитории определяется следующим образом:
Код: Выделить всё
@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());
Код: Выделить всё
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